名词解释:
函数式接口(Functional Interface)是Java 8引入的概念,指有且仅有一个抽象方法的接口(可以包含多个默认方法或静态方法)。@FunctionalInterface注解用于标识这样的接口,它虽然不是强制性的,但可以帮助编译器检查接口是否符合函数式接口的定义。
声明
- 唯一的抽象方法;
- 可以有默认方法和静态方法;
@FunctionalInterface
interface MyFunctionalInterface {
// 唯一的抽象方法
void execute(String message);
// 可以有默认方法
default void defaultMethod() {
System.out.println("This is a default method.");
}
// 可以有静态方法
static void staticMethod() {
System.out.println("This is a static method.");
}
}
实现
- Lambda表达式:
public class FunctionalInterfaceExample {
public static void main(String[] args) {
// 使用Lambda表达式实现函数式接口
MyFunctionalInterface func = (message) -> System.out.println("Message: " + message);
func.execute("Hello, Functional Interface!");
func.defaultMethod();
MyFunctionalInterface.staticMethod();
}
}
- 使用方法引用:
public class MethodReferenceExample {
public static void printMessage(String message) {
System.out.println("Printed: " + message);
}
public static void main(String[] args) {
// 使用方法引用实现函数式接口
MyFunctionalInterface func = MethodReferenceExample::printMessage;
func.execute("Hello from method reference!");
}
}
- 匿名内部类(不推荐)
public class AnonymousClassExample {
public static void main(String[] args) {
// 使用匿名内部类实现
MyFunctionalInterface func = new MyFunctionalInterface() {
@Override
public void execute(String message) {
System.out.println("Anonymous class says: " + message);
}
};
func.execute("Hello from anonymous class!");
}
}
Java内置的函数式接口:
- Function<T, R> - 接受一个输入参数T,返回结果R
- Predicate
- 接受一个输入参数T,返回boolean - Consumer
- 接受一个输入参数T,无返回 - Supplier
- 无输入参数,返回一个结果T - BiFunction<T, U, R> - 接受两个输入参数T和U,返回结果R
特性分析:
- 主要可以能简化代码,提高可读性,与 Lambda 表达式、方法引用、回调机制等特性配合使用;