本文写于 2022 年 06 月 20 日
当我们生命的接口有且仅有一个抽象方法签名时,这个接口就可以作为一个函数式接口。(可以有其他非抽象方法,或者覆盖 Object 的 public 方法)
例如:
@FunctionalInterface public interface Adder { int add(int a, int b); }
这里使用 FunctionalInterface
注解,可以让编译器和 IDE 帮助我们检查该接口是否符合函数式接口的定义,如果不符合,就会报错。
当我们声明了一个函数式接口后,在传入参数时就可以直接使用 lambda 表示来简化操作。
class Main { public static void main(String[] args) { foo(() -> a + b, 1, 2); } private static void foo(Adder adder, int a, int b) { System.out.println(adder.add(a, b)); } }
或者你也可以选择创建一个实现类实现 Adder
接口,再将类实例化后传入方法。
或者也可以使用匿名内部类。
(完)