我刚注意到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
方法?
答案 0 :(得分:2)
为什么没有
Consumer<T>
采用身份识别方法?
Consumer<T>
始终使用类型为T
的对象并返回void
。
如果它有.identity()
方法,它应该消耗void
并返回void
,但它不可能消耗void
,因此&# 39;没有这样的方法。
与Function<T, R>
的区别在于T
和R
可以相同。 Consumer<T>
的结果类型固定为void
,不能与消费的类型相同。