Java 8 消费者和副作用

2022-09-02 09:51:47

我是Java 8的新手,我偶然发现了Consumer java文档,上面写着:“消费者应该通过副作用来操作。有人可以解释为什么这么说吗?


答案 1

消费者有以下签名的方法accept

void accept(T t);

该方法将 t 作为输入,并且不返回任何内容 (void),因此您无法从中返回任何内容,也无法将方法调用替换为它返回的值。

副作用的一个例子是打印语句,

list.stream.foreach(System.out::println);

foreach 将消费者作为论据。如果你仔细想想,你可以用这种方法做的唯一有用的事情就是改变世界(即,改变一种状态)。

与此相反的是纯函数,一个不会改变任何状态的函数,它接受一个输入,并返回一些东西,例如

Function<Integer,Integer> fn = x -> x*x;

fn这里没有任何副作用(它不会改变任何东西),它接收一个整数并和平地返回其平方。


答案 2

根据消费者javadoc,必须使用具有签名的方法声明消费者。因此,该方法无法返回值。如果它没有副作用,它就没有能力执行任何效果。void accept(T)


推荐