2015-10-20 72 views
4

我剛纔注意到Consumer沒有identity()方法,就像java.util.function.Function一樣。爲什麼java.util.function.Consumer不具有identity()?

是的,這只是一個漏洞而已,但至少可以清楚地看到,我不僅錯過了括號中的一些代碼。

拿這個人爲的例子:

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 HAVA的identity方法?

+3

我不會稱之爲「身份」。 'empty'或'noAction'會更好地描述它。 – Eran

+2

看到這個:http://stackoverflow.com/questions/29851525/is-there-a-method-reference-for-a-no-op-nop-that-c​​an-be-used-for-anything-lamb –

+4

我想,[這](http://stackoverflow.com/a/26553481/4856258)斯圖爾特也回答你的類似問題的答案。 –

回答

2

爲什麼Consumer<T>有一個身份識別方法?

Consumer<T>的始終消耗T類型的對象,並返回void

如果它有一個.identity()方法它應該消耗void並返回void,但它不可能消耗void,因此沒有這樣的方法。

Function<T, R>的區別在於TR可以是相同的。 Consumer<T>具有固定的結果類型void,這不可能與消耗的類型相同。

+2

是的,但是我認爲OP *真的*想知道爲什麼沒有內置的存儲桶。 – chrylis

相關問題