函数式接口
函数式接口是 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 是否满足条件 |
