Skip to content

函数式接口

函数式接口是 Java 8 引入 Lambda 表达式的基础概念,它定义了 “只有一个抽象方法的接口”

@FunctionalInterface

java
@FunctionalInterface
interface MyFunc {
    int add(int a, int b);
}

@FunctionalInterface是可选的,类似于@override在编译前进行校验,编译器会检查接口是否满足函数式接口条件

默认方法和静态方法不影响一个类是否是函数式接口

java
@FunctionalInterface
interface FuncExample {
    void run();               // 抽象方法
    default void log() {      // 默认方法
        System.out.println("日志");
    }
    static void info() {      // 静态方法
        System.out.println("信息");
    }
}

定义函数式接口参数

java
import java.util.function.Consumer;

public class CaseService {

    public void handleCase(String caseId, Consumer<String> afterHandler) {
        // 1. 核心业务
        System.out.println("处理案件:" + caseId);

        // 2. 可扩展逻辑(由调用方决定)
        afterHandler.accept(caseId);

        // 3. 收尾
        System.out.println("案件处理结束:" + caseId);
    }
}

常见内置函数式接口

Java 8 在 java.util.function 包里提供了很多现成的函数式接口:

接口方法签名用途
Function<T,R>R apply(T t)输入 T,返回 R
Consumer<T>void accept(T t)消费一个 T,没有返回
Supplier<T>T get()提供一个 T,没有输入
Predicate<T>boolean test(T t)判断 T 是否满足条件

Consumer