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

tom*_*maj 5 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);
}
Run Code Online (Sandbox Code Playgroud)

问题

为什么没有Consumer方法identity呢?

Kon*_*kov 2

为什么没有Consumer<T>身份方法?

总是Consumer<T>消耗类型对象T并返回void

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

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

  • 是的,但我认为OP *真的*想知道为什么没有内置的位桶。 (3认同)