函数式接口作为方法参数的本质是将行为抽象为接口类型,通过lambda表达式、方法引用或实现类填充逻辑;它要求接口仅含一个抽象方法,推荐加@functionalinterface注解。

Java 中函数式接口作为方法参数传递,本质是把“行为”抽象成接口类型,再用 Lambda 表达式、方法引用或实现类来填充具体逻辑。它不是直接传函数,而是传一个符合函数式接口定义的实例。
函数式接口是前提
必须是一个只含一个抽象方法的接口,推荐加 @FunctionalInterface 注解。例如:
-
Runnable:无参无返回值 -
Consumer<t></t>:接收一个参数,不返回结果 -
Function<t r></t>:接收一个参数,返回一个结果 -
Predicate<t></t>:接收一个参数,返回 boolean -
BiFunction<t u r></t>:接收两个参数,返回一个结果(适合多参场景)
写法上直接把接口当参数类型
方法签名中声明函数式接口为形参,调用时传 Lambda 或方法引用即可:
public static void process(String input, Consumer<string> handler) {
handler.accept(input);
}
// 调用方式
process("hello", s -> System.out.println("处理:" + s));
process("world", System.out::println);
</string>
多参数怎么办?别硬套 Function
Function<a b></a> 只支持单入参,两个以上参数应选内置多参接口或自定义:
- 两个参数 → 用
BiFunction<a b r></a>或BiConsumer<a b></a> - 三个参数 → 没有标准接口,可自定义带 @FunctionalInterface 的接口,如:
@FunctionalInterface
interface TriFunction<a b c r> {
R apply(A a, B b, C c);
}
</a>
然后在方法中使用:TriFunction<string integer boolean string> func</string>,调用时用 func.apply("a", 1, true)。
关键点:类型匹配 + 实现到位
传参时只要满足三点就成立:
- 目标方法参数类型是某个函数式接口
- Lambda 表达式或方法引用的签名(参数个数、类型、返回值)与接口中唯一抽象方法一致
- 运行时 JVM 会自动将 Lambda 转为该接口的实例对象
不需要 new 实现类,也不需要显式 implements —— 这正是 Java 8 函数式编程简洁的核心。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











