Java自定义函数式接口详解
发布时间:2023-06-11 19:01:43
Java 8 中新增了对函数式编程的支持,引入了函数式接口。函数式接口可以看作是一种抽象的函数类型,它只包含一个抽象方法和一些默认方法或静态方法,这些方法的签名必须一致。
在Java 8中,函数式接口被用作一种Lambda表达式的类型,使得我们可以像使用其他类型一样使用Lambda表达式。Java 8预定义了一些Java语言级别的函数式接口,例如Supplier、Consumer、Function等等。除了这些预定义的函数式接口,Java也支持自定义函数式接口。
定义自定义函数式接口
自定义函数式接口需要满足以下要求:
- 仅包含一个抽象方法
- 可以包含多个默认方法和静态方法
示例:
@FunctionalInterface
public interface MyFunctionalInterface {
void singleAbstractMethod();
default void defaultMethod() {
System.out.println("default method");
}
static void staticMethod() {
System.out.println("static method");
}
}
注解@FunctionalInterface是可选的,它可以帮助编译器验证接口是不是函数式接口。如果接口不符合函数式接口的规范,编译器就会报错。
函数式接口的使用
自定义函数式接口可以像使用其他函数式接口一样使用,可以用Lambda表达式或方法引用来实现接口中的唯一的抽象方法。
示例:
public class Main {
public static void main(String[] args) {
MyFunctionalInterface myFunctionalInterface = () -> {
System.out.println("single abstract method implemented by lambda expression");
};
myFunctionalInterface.singleAbstractMethod();
MyFunctionalInterface myFunctionalInterface1 = Main::methodReference;
myFunctionalInterface1.singleAbstractMethod();
}
public static void methodReference() {
System.out.println("single abstract method implemented by method reference");
}
}
lambda表达式实现:
MyFunctionalInterface myFunctionalInterface = () -> {
System.out.println("single abstract method implemented by lambda expression");
};
方法引用实现:
MyFunctionalInterface myFunctionalInterface1 = Main::methodReference;
总结
自定义函数式接口是Java 8中函数式编程的基础,可以用来实现各种功能。它的定义和使用都比较简单,只需要满足函数式接口的规范即可。函数式接口可以和Lambda表达式或方法引用一起使用,提高了代码的可读性和简洁性。
