函数式接口@FunctionalInterface
引言
Java中接口也支持函数式,Java8中就支持这一特性,本文文章将讲解这个注解的使用方式
定义
函数式接口是指只包含一个抽象方法的接口。需要注意的是,函数式接口可以包含默认方法、静态方法和Object类的公共方法,但只能有一个抽象方法。函数式接口为 Java 引入了 Lambda 表达式和方法引用等函数式编程的特性。
函数式接口的作用
一般认为有两点
- 编译时检查:使用 @FunctionalInterface 注解标记接口后,编译器会检查该接口是否满足函数式接口的定义,即是否只包含一个抽象方法。如果不满足,编译器会报错,有助于在开发过程中尽早发现错误。
- 代码可读性:该注解可以让其他人一眼就明白这个接口是设计为函数式接口的,用于支持 Lambda 表达式或方法引用。
实战
// 使用 @FunctionalInterface 注解标记函数式接口
@FunctionalInterface
interface MyFunctionalInterface {
// 唯一的抽象方法
void doSomething();
// 默认方法,不影响函数式接口的定义
default void printMessage() {
System.out.println("This is a default method.");
}
// 静态方法,不影响函数式接口的定义
static void staticMethod() {
System.out.println("This is a static method.");
}
// 重写 Object 类的方法,不影响函数式接口的定义
@Override
boolean equals(Object obj);
}
public class Main {
public static void main(String[] args) {
// 使用 Lambda 表达式实现函数式接口
MyFunctionalInterface myInterface = () -> System.out.println("Doing something...");
myInterface.doSomething();
// 调用默认方法
myInterface.printMessage();
// 调用静态方法
MyFunctionalInterface.staticMethod();
}
}
需要注意的点
- 标注注解的接口中只支持一个抽象方法,也就是对应的抽象函数
- 实现接口可以直接利用lamda表达式优化开发