Java Map <k,v>:为什么get(object)没有得到(K)?</k,v>

时间:2010-07-16 12:19:22

标签: java generics

  

可能重复:
  Java Generics: Why Does Map.get() Ignore Type?

有人可以解释为什么使用Map定义

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之前的版本)吗?

2 个答案:

答案 0 :(得分:7)

答案 1 :(得分:0)

模板目标是在编译时强制执行控制(不能将Cat放入Dog List中),并通过抑制显式强制转换来简化程序员的代码。

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

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