BiConsumer 是 Java 8 引入的函数式接口,用于接收两个指定类型参数并执行无返回值操作;其 accept(T t, U u) 方法必须严格按泛型顺序传入两个参数,少传、多传或类型错位均导致编译错误。

BiConsumer 的 accept 方法本身就是为接收两个参数设计的,调用时直接传入两个对应类型的值即可。
BiConsumer 是什么
BiConsumer 是 Java 8 引入的函数式接口,代表一个接受两个输入参数、不返回结果(void)的操作。它的泛型定义是 BiConsumer<t u></t>,其中 T 和 U 是两个参数的类型。
accept 方法怎么传参
调用 accept 时,按声明顺序传入两个参数,类型必须与泛型一致:
- 第一个参数对应泛型
T,比如String - 第二个参数对应泛型
U,比如Integer - 顺序不能颠倒,否则编译报错
常见写法示例
以打印姓名和年龄为例:
立即学习“Java免费学习笔记(深入)”;
BiConsumer<String, Integer> printer = (name, age) -> System.out.println(name + ": " + age);
printer.accept("Alice", 30); // ✅ 正确:String 在前,Integer 在后
// printer.accept(30, "Alice"); // ❌ 编译错误:类型不匹配
配合其他 API 使用
常用于 Map.forEach 等场景,系统自动把 key 和 value 作为两个参数传给 accept:
map.forEach((k, v) -> System.out.println(k + "=" + v))- 这里
k是 key 类型,v是 value 类型,accept内部自动接收这两个值
注意点
不要试图“拆开”或“单独传一个参数”,accept 必须且只能传两个参数:
- 少传或多传都会编译失败
- 不能像
Consumer那样只传一个参数再用闭包捕获另一个 - 如果需要动态决定传什么,可先组织好两个变量再调用


















