当前位置: 移动技术网 > IT编程>开发语言>Java > Java的lambda表达式实现解析

Java的lambda表达式实现解析

2019年07月22日  | 移动技术网IT编程  | 我要评论

java8引入了lambda表达式。lambda表达式并不是新功能,只是为了方便代码编写的语法糖。

但,即便是在其他语言已经司空见惯的lambda表达式,如果在java中要支持它,还需要考虑各种向下兼容的问题。

简单的说,java的lambda表达式支持,大约需要考虑2个方面

  • 需要支持lambda语法,以替代原有的方法匿名类
  • 需要考虑已有jdk中,如何增加新操作以支持lambda表达式

对于第一点的回答是funtionalinterface的annotation,第二点的回答是default方法。

functionalinteface

通过在一个interface上增加@functionalinterface, 表示这个接口是特殊interface。其特殊性体现在

  1. 该interface只能有一个抽象方法等待子类实现
  2. 之后,此interface对应的对象,可以是lambda表达式
  3. lambda表达式必须与此interface中唯一的抽象方法签名相一致
@functionalinterface
public interface itest {
  void sayhello(string name); 
}

public class testlambda {
    public static string name = "test";
    public static void testrun2(itest test){
      test.sayhello(name);
    }
    public static void main(string[] args) {
      testrun2(test->system.out.println(test));
    }
}

default方法

default方法只能在interface中声明。default方法使得interface也可以定义已经实现的方法。那么问题来了。interface为什么一定需要这个特性?java的interface不就是应该都只有抽象方法吗?

考虑一下这个例子

list<integer> alist = new arraylist<integer>();
alist.add(1);
alist.add(2);
alist.add(3);
alist.add(4);
alist.foreach((s)->system.out.println(s));  

list是jdk java.util的一个接口。此接口由来已久。如果要在其中引入foreach方法,而且支持使用lambda表达式,必须对list进行一些改变。但是,jdk要向下兼容,一旦对已知的list增加接口,势必无法保证兼容性。所以,出于这个原因,想办法增加了default方法。这使得一个接口可以定义默认方法,以保全jdk原有的接口可以继续向下兼容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网