我有一个关于通用 java 集合的问题,特别是 Map。我注意到需要参数(通常是键)的 get、contains 和类似方法将 Object 作为参数,而我希望它们采用 K 类的东西,例如,而不是get(Object key)
我所期望get(K key)
的。谁能解释这个原因?
问问题
437 次
2 回答
2
于 2012-09-19T14:06:19.857 回答
0
主要问题是向后兼容性。
即使您“知道”它不起作用,也总是可以尝试执行以下操作
Map map = new HashMap();
map.put("hello", "world");
Object o = map.get(1); // null
boolean b = map.contain(2); // false
boolean b2 = map.remove(3); // false
因此,这些方法仍然需要能够采用任何类型,即使泛型暗示它将始终返回null
or false
。
也可以构造一个 TreeMap ,其中键不需要是相同的类型,等于 true,具有相同的 hashCode 甚至 compareTo() == 0
Map map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return String.valueOf(o1).compareTo(o2.toString());
}
});
map.put("1", "one");
map.put(2, "two");
map.put(3L, "three");
map.put('4', "four");
for(Object o: new Object[] { 1L, '2', 3, "4"}) {
System.out.println(o.getClass().getSimpleName()+" "+o+" => "+map.get(o));
}
印刷
Long 1 => one
Character 2 => two
Integer 3 => three
String 4 => four
于 2012-09-19T14:06:19.420 回答