1. Lambda表达式使用的前提条件
-
方法的参数或局部变量类型必须为接口!!!,才能使用Lambda
eg:局部变量类型:(Runnable是一个接口)
匿名内部类方式:
Runnable r = new Runnable(){
@override
public void run(){
System.out.println("xxx");
}
}
这种情况,你要来个局部变量,可以使用 Lambda表达式
Runnable r = ()-> System.out.println("xxx");
- 接口中有且仅有一个抽象方法
JDK8中,只有一个抽象方法的接口称为函数式接口,我们就能使用 Lambda。
针对一个接口中,是否有大于一个抽象方法?JDK8为我们新增了一个注解:@FunctionalInterface。它能够帮助我们检测这个接口是不是只有一个抽象方法,如果有两个抽象方法,则会报错。
2. PECS(Producer Extends Consumer Super)原则
频繁往外读取内容的,适合用上界Extends
经常往里插入的,适合用下界Super