接口,lambda表达式与内部类(零)

Lambda表达式用于传递代码段并回调

Arrays.sort()的第二个参数可以用下面的Lambda表达式代替:

并且:

没有参数的情况:

类型推导:

省略小括号的情形:

无须指定返回值的类型:

Lambda表达式不合法的情形:

 

函数式接口

 

下文中,让方法不再是抽象的意思是,子类不必须再去实现这个方法

对下面这个Lambda表达式的分析:

可以使用接口变量保存函数表达式,不必增加函数类型

不能把Lambda表达式赋给类型为Object的变量,Object不是一个函数式接口

 

关于Predicate接口

 

方法引用:

另一个方法引用的例子:
Arrays.sort(strings, String::compareToIgnoreCase)

使用方法引用的形式:

有歧义怎么办:

 

构造器引用与方法引用比较类似,只不过方法名为new。Person::new是Person构造器的一个引用,至于引用哪一个构造器,取决于上下文

 

Java中的lambda表达式就是闭包

如果L表达式中引用了一个从外层传过来的变量,那么由于在回调L的时候,可能是很久之后了,这个自由变量可能已经不存在了

如何保留text变量呢

规定在L中,只能引用值不会改变的变量。因为在L中改变变量的话,并发执行多个动作就会不安全。

在L中引用的变量如果可能在外部改变,也是不合法的

L捕获的必须是实际上的最终变量,在初始化后不会再为它赋新值

L表达式的体与嵌套块有着相同的作用域

在L中使用this,指的是创建这个L表达式方法的this参数(外层的类)

 

Java提供了一系列的函数式接口(一些方法的参数返回值写死的供调用的东西),使用他们可以避免装箱

 

关于使用@FunctionalInterface接口注解:

 

posted @ 2018-12-18 10:11  geeklove  阅读(156)  评论(0编辑  收藏  举报