接口,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接口注解: