在Java中,Map接口定义为
public interface Map<K,V> {
...
V get(Object key);
...
}
为什么不呢?
V get(K key);
我刚碰到一个讨厌的错误,因为使用了错误的类型密钥。我认为泛型的目的是在编译期间尽早捕获类型错误。这会破坏这个目的吗?
答案 0 :(得分:9)
Kevin Bourrillion blogged about this前一段时间。总结:
统一,Java的方法 收藏框架(和谷歌 收藏图书馆也没有 限制其参数的类型 除非有必要预防 收集破碎。
就我个人而言,我不是那种方法的粉丝,但考虑到已采取的差异方法,它确实有一定意义。
答案 1 :(得分:3)
一种类型的对象可以是.equals()
到另一种类型的对象。 get()
只要求您提供的对象.equals()
为您获得的密钥
答案 2 :(得分:-3)
要添加到@subtenante,Java的设计使Java始终向后兼容。泛型不允许使用错误的类型,因为这不会破坏向后兼容性。确保使用正确密钥的简单方法是执行此操作。
K key = null;
V value = null;
Map<K,V> mapped = new HashMap<K,V>()
.......//set the key and value..........
mapped.put(key, value)
.....
V var = mapped.get(key);
问题解决了。
对泛型的另一个警告是,任何一个班级的孩子也可以被放入一个集合中。
Number k= null;
Number v= null;
Map<Number,Number> mapped = new HashMap<Number,Number>()
.......//set the key and value..........
k = double someDouble;
v = int someInt;
mapped.put(k, v)
.....
这可能会导致一些大错误!