1. 函数式接口的本质解析
函数式接口是Java 8引入的核心特性之一,它本质上是一个仅包含单个抽象方法的接口。这种设计允许我们将函数作为方法参数传递,或者将代码本身作为数据处理。理解函数式接口需要把握三个关键特征:
- 单抽象方法规则:严格限定接口中只能有一个未实现的抽象方法
- 默认方法兼容:可以包含多个默认方法(default方法)
- 静态方法支持:允许定义静态方法
java复制// 典型函数式接口示例
@FunctionalInterface
interface StringProcessor {
String process(String input); // 唯一的抽象方法
default void log(String msg) { // 默认方法不影响函数式接口性质
System.out.println("LOG: " + msg);
}
static boolean isEmpty(String str) { // 静态方法
return str == null || str.trim().isEmpty();
}
}
重要提示:虽然@FunctionalInterface注解不是强制性的,但强烈建议始终使用。这个注解会触发编译器检查,确保接口确实符合函数式接口的定义要求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Java内置的四大核心函数式接口
Java 8在java.util.function包中提供了丰富的内置函数式接口,其中最核心的是以下四类:
2.1 Consumer 消费型接口
接受一个输入参数且不返回结果的操作。典型应用场景包括集合遍历、资源处理等。
java复制List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println("Hello, " + name)); // forEach参数就是Consumer
// 复杂Consumer示例:带资源清理的消费操作
Consumer<InputStream> fileConsumer = input -> {
try {
// 处理输入流
byte[] data = new byte[1024];
while (input.read(data) != -1) {
// 处理数据
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (input != null) input.close();
} catch (IOException e) {
// 忽略关闭异常
}
}
};
