【发布时间】:2015-10-20 07:22:34
【问题描述】:
我刚刚注意到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 方法?
【问题讨论】:
-
我不会称之为
identity。empty或noAction会更好地描述它。 -
我认为,thisStuart Marks 对类似问题的回答也能回答您的问题。
-
看来@TagirValeev 找到的答案实际上来自核心 JDK 开发人员,是最有启发性的答案。
-
没有理由创建一个名为
identity的局部变量。如果你只使用consumers.getOrDefault(key, x->{}).accept(param);,除了你的“有趣”方面之外,几乎没有预定义的无操作操作可以提供......