函数式接口是Java行为参数化的底层契约,核心是“单抽象方法+Lambda适配”;其本质约束为仅含一个未实现抽象方法,允许默认方法、静态方法及Object继承方法;四大基础接口为Consumer、Supplier、Function、Predicate;Lambda需严格匹配方法签名;组合操作(如andThen、and、negate)体现进阶能力。

函数式接口不是语法糖,而是 Java 实现行为参数化的底层契约。理清它,关键不在背接口名,而在抓住“单抽象方法 + Lambda 适配”这个核心逻辑。
盯死“一个抽象方法”这条铁律
函数式接口的本质约束,就是接口里只能有一个未实现的抽象方法。其他全是“绿灯”:
- 默认方法(default)可以有多个,不破坏函数式特性
- 静态方法(static)随便加,和实现无关
- toString()、equals()、hashCode() 这些从 Object 继承的方法,不算数
- @FunctionalInterface 注解不是必需的,但强烈建议加上——它让编译器帮你把关,多写一个抽象方法就直接报错
四大基础接口,吃透签名和语义
不用记全 43 个,先拿下最常用、最典型的四个,它们覆盖了绝大多数场景:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Consumer<T>:只消费,不返回。方法是 accept(T)。适合打印、修改、发通知等“做了就行”的操作
- Supplier<T>:只生产,不接收。方法是 get()。适合创建对象、生成随机数、读配置等“给个结果”的动作
- Function<T, R>:转换输入为输出。方法是 apply(T)。字符串转数字、DTO 转 VO、字段映射都靠它
- Predicate<T>:判断真假。方法是 test(T)。集合过滤、权限校验、状态流转条件都用它
Lambda 写法要跟接口方法对齐
Lambda 不是自由发挥,它是按接口抽象方法的签名“填空”:
立即学习“Java免费学习笔记(深入)”;
- 参数个数、类型必须匹配——编译器会推断,但不能错
- 返回值类型必须和方法声明一致——比如 Predicate 的 test 必须返回 boolean
- 常见简写:x -> x.length()(单参数省括号)、() -> new Date()(无参)、s -> { return s.trim(); }(多语句需大括号+return)
组合能力才是进阶关键
单个接口好理解,真正体现函数式威力的是组合:
-
Function.andThen():前一个输出,后一个输入。比如
str -> str.toLowerCase().andThen(s -> s.length()) -
Predicate.and() / or() / negate():拼条件。比如
isAdult.and(hasLicense).negate() -
Consumer.andThen():串执行。比如
log::info.andThen(db::save)

















