作为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