Consumer是Java 8函数式接口,用于接收单参数且无返回值的操作,核心方法为void accept(T t),支持Lambda、方法引用和匿名类实现,常用于forEach、andThen等场景。

Consumer 是 Java 8 引入的函数式接口,专门用于“接收一个参数、不返回结果”的场景,核心方法是 void accept(T t)。它不产生返回值,只负责对输入参数执行某种操作(比如打印、修改对象状态、存入集合等)。
如何定义并传入参数
Consumer 接口只有一个抽象方法 accept(),所以可以用 Lambda 表达式、方法引用或匿名内部类来实现:
- 用 Lambda:直接写参数名和操作逻辑,如
t -> System.out.println(t) - 用方法引用:当已有现成方法签名匹配(
void method(T)),如System.out::println - 用匿名类(较少用):
new Consumer<String>() { public void accept(String s) { ... } }
典型使用方式:传参并触发操作
调用 accept() 方法时,把具体值传进去即可执行逻辑:
Consumer<String> printer = s -> System.out.println("Hello: " + s);
printer.accept("World"); // 输出:Hello: World
注意:Consumer 本身不保存参数,也不自动调用;你必须显式调用 accept(参数) 才会执行操作。
立即学习“Java免费学习笔记(深入)”;
常配合其他 API 使用(如 forEach、andThen)
Consumer 经常出现在集合遍历或链式操作中:
-
list.forEach(System.out::println)—— 遍历时对每个元素执行消费操作 -
consumer1.andThen(consumer2).accept(obj)—— 先执行 consumer1,再执行 consumer2 - 可组合多个 Consumer,适合分步处理同一对象(如校验 + 记录 + 发送)
注意事项:不能返回值,也不能抛出受检异常
因为 accept() 返回 void,Lambda 体内不能有 return 表达式(但可以写 return; 提前退出);如果操作中可能抛出受检异常(如 IOException),需在 Lambda 内部捕获,或改用自定义函数式接口封装异常。


















