Lambda

it2025-06-02  8

函数式接口@FunctionalInterface

在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方法:完美解决报错。

@FunctionalInterface 注释中可以有其他方法。

@FunctionalInterface interface LambdaInterface{ // 抽象方法 public void fun(); // java.lang.Object中的方法不是抽象方法 public boolean equals(Object var1); // default不是抽象方法 public default void defaultMethod(){} // static不是抽象方法 public static void staticMethod(){} }

使用@FunctionalInterface 的规则

有且仅有一个抽象方法静态方法和默认方法,都不算是抽象方法接口默认继承java.lang.Object,接口显示声明覆盖了Object中方法,也不算抽象方法。
最新回复(0)