为什么java.util.function.Consumer没有identity()?

时间:2015-10-20 07:22:34

标签: java java-8

我刚注意到Consumer没有像identity()这样的java.util.function.Function方法。

是的,这只是一个漏掉东西的漏洞,但至少我很清楚,我不仅仅错过了括号中的一些代码。

采取这个人为的例子:

public void applyConsumerIfExists(String key, String param) {
    Map<String, Consumer<String>> consumers = new HashMap<>();
    consumers.put("a", MyClass::myConsumer);

    // I can create my own, but that's no fun :(
    Consumer<String> identity = input -> {};
    consumers.getOrDefault(key, identity).accept(param);

    // DOESN'T WORK, since identity() doesn't exist on Consumer
    consumers.getOrDefault(key, Consumer.identity()).accept(param);
}

问题

为什么没有Consumer采用identity方法?

1 个答案:

答案 0 :(得分:2)

  

为什么没有Consumer<T>采用身份识别方法?

Consumer<T>始终使用类型为T的对象并返回void

如果它有.identity()方法,它应该消耗void并返回void,但它不可能消耗void,因此&# 39;没有这样的方法。

Function<T, R>的区别在于TR 可以相同。 Consumer<T>的结果类型固定为void,不能与消费的类型相同。