我只是注意到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呢?
为什么没有
Consumer<T>身份方法?
总是Consumer<T>消耗类型的对象T并返回void。
如果它有一个.identity()方法,它应该消耗void并返回void,但不可能消耗 a void,因此没有这样的方法。
与 的区别Function<T, R>在于T和R 可以相同。具有Consumer<T>固定的结果类型,它不可能与消耗的void类型相同。
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |