本文最后更新于 2 年前,文中所描述的信息可能已发生改变。
函数式接口(Functional Interface)是指仅包含一个抽象方法的接口。它可以包含多个默认方法和静态方法,但只能有一个抽象方法。函数式接口通常用于支持函数式编程风格,允许将行为作为参数传递。 因此其也被称为“单一抽象方法接口”(Single Abstract Method Interface, SAM)。本质上是一个匿名内部类的简化。
java
//它代表一个接收参数但不返回结果的操作。
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
常见的使用场景包括:
- 遍历集合中的每个元素并对其执行操作
- 将方法引用作为
Consumer
传入,如File::delete
- 日志记录中的一些场景
- 接收并处理消息队列中的每个消息 所以
Consumer
代表执行一个对参数的操作,通常用在forEach遍历或消息处理的场景中。与Supplier
形成对比,Supplier
生产数据,Consumer
消费数据。
java
// 代表一个没有参数只返回T类型结果的函数。
@FunctionalInterface
public interface Supplier<T> {
T get();
}
常用在:
- 需要一个提供数据的方法时
- 用作延迟初始化
- 在一些需要回调的场景下获取数据
- 与Stream组合生成数据
java
//这里T表示输入参数类型,R表示返回值类型。
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
Function可用来表示:
- 类型转换
- 提取或转换对象的字段
- 计算
- 格式化等操作