Java函数式接口是仅含一个抽象方法的接口,用于实现行为参数化;通过Lambda表达式、方法引用或匿名内部类传递逻辑,配合JDK内置接口(如Consumer、Function)及@FunctionalInterface注解保障类型安全与语义清晰。

Java 中不能直接把函数名当参数传,但可以用函数式接口实现“行为参数化”——本质是把一段逻辑封装成对象,再作为参数传进去。
核心前提:函数式接口必须只有一个抽象方法
比如 Runnable、Consumer@FunctionalInterface 注解,编译器会帮你检查是否真只有一个抽象方法。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
传参方式有三种,按场景选
-
Lambda 表达式:适合逻辑简单、一次性使用的情况
例如:processList(list, x -> x * 2),其中x -> x * 2是Function实例 -
方法引用:当已有现成方法且签名匹配时最简洁
例如:list.forEach(System.out::println),System.out::println就是Consumer的实例 - 匿名内部类:Java 8 之前常用,现在基本不用,仅作兼容或特殊需要(如需访问外部变量又受限于 Lambda 限制)
实际写法:方法声明要明确接收函数式接口类型
不要写 void doSomething(Object func) 这种模糊类型。要写清楚:
-
void handle(String s, Consumer→ 接收无返回值操作action) -
→ 接收带返回值的转换逻辑R transform(T input, Function mapper) -
boolean check(int n, Predicate→ 接收判断逻辑condition)
关键细节别忽略
- 函数式接口变量本身不是“函数”,而是实现了该接口的实例,调用靠
.apply()、.accept()、.test()等约定方法 - Lambda 或方法引用传进去后,方法体内要主动调用它,否则逻辑不会执行
- 泛型类型必须对齐:比如
Function的输入必须是 String,输出必须能转成 Integer
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










