在Lambda_01 中使用了Runnable举例,那么Runable为什么可以使用Lambda表达式呢? 通过阅读源代码分析: 在JDK1.8中Runable加入了注解==@FunctionalInterface:函数式接口==
接口中有且只有一个抽象方法的函数接口,多了编译将报错。
interface LambdaInterface4{ //抽象方法fun1 public void fun1(); //抽象方法fun2 public void fun2(); }咦?上面代码怎么没有报错?
因为上面代码压根就不算是函数式接口 我们实现以下试试
public class Lambda04 { public static void main(String[] args) { LambdaInterface4 lambdaInterface4 = new LambdaInterface4() { @Override public void fun() { } @Override public void fun2() { } }; } } interface LambdaInterface4{ public void fun(); public void fun2(); }上面代码是实现Java接口,不是函数接口,你可以尝试使用Lambda表达式试试。用不了。 且LambdaInterface4也不能被==@FunctionalInterface== 注释。因为接口中有两个抽象方法。 注释掉fun2方法:完美解决报错。