作爲What are the reasons why Map.get(Object key) is not (fully) generic的後續問題,爲什麼JDK 6和7接口沒有將「get」方法定義爲泛型方法,以便編譯器可以對返回值使用類型推斷?爲什麼JDK Map.get不支持對返回值的類型推斷
例如,如果 「GET」 被定義爲:
public <T extends V> T get(Object key)
然後呼叫者可以這樣寫:
Map<String,Object> m = new HashMap<>();
m.put("key", new Foo());
...
Foo f = m.get("key"); // type inference, implicit cast
在上面的代碼片段,我可以M的定義爲Map<String,Foo>
,但要注意將m定義爲Map<String,Object>
而不是Map<String,Foo>
在許多情況下很有用,例如,當m可以包含任何類型的值時,但仍可以基於關鍵字推斷值類型,例如一個簡單的緩存或上下文對象。
這不就是同一個問題嗎?不要回答你回答這個問題的問題嗎?如果沒有,更具體。 (我最初的反應是簡單的投票結束......) –
不,它不一樣。 AFAICT,這個問題已經明確地說明了這種差異,但要重申:我不是在問爲什麼鍵是Object類型的 - 這在所引用的問題中得到了回答。我在詢問如何定義get作爲類型的一般方法,這顯然是不同的。 –
Raman