有人可以解释为什么使用Map定义
V put(K key,V value);
V get(Object key);
为什么get
未定义为:
V get(K key)
同样,为什么这些方法分别输入Object
,而不是K
和V
?
boolean containsKey(Object key); // Why not K?
boolean containsValue(Object value); // Why not V?
这是向后兼容的事情(1.5之前的版本)吗?
答案 0 :(得分:7)
答案 1 :(得分:0)
模板目标是在编译时强制执行控制(不能将Cat放入Dog List中),并通过抑制显式强制转换来简化程序员的代码。
在这些方法中,不需要模板。如果你比较(与“等于”猫和狗),它没有发病率。更多,两个不同类的objets可以是“等于”!限制性太强的方法签名会限制Map的使用。
注意:模板信息仅在编译时验证,但在之后丢失。在运行时,通过反射,您可以将Cat放入狗列表...