2010-07-16 99 views
6

可能重复:
Java Generics: Why Does Map.get() Ignore Type?Java Map <K,V>:为什么get(object)没有得到(K)?

可能有人请解释为什么与地图定义

V put(K key,V value); 
V get(Object key); 

为什么get没有定义为:

V get(K key) 

同样,为什么这些方法分别键入为Object,而不是KV

boolean containsKey(Object key); // Why not K? 
boolean containsValue(Object value); // Why not V? 

这是一个向后兼容的东西(1.5前)?

+0

可能的重复http://stackoverflow.com/questions/1455138/java-generics-why-does-map-get-ignore-键入 – tonio 2010-07-16 12:22:57

+0

同意 - 谢谢。将标记为重复。 – 2010-07-16 12:27:37

回答

0

模板的目标是加强在编译时间控制(你不能把猫在狗列表),并通过抑制显式强制转换来简化程序员的代码。

在这些方法中,不需要模板。如果你比较(与“等于”一只猫和一只狗),它没有发生。更多,不同类的两个objets可以是“等于”!限制性太强的方法签名会限制地图的使用。

注意:模板信息仅在编译时进行验证,但之后会丢失。在运行时,通过反射,您可以将猫放入狗列表中...

相关问题