Mic*_*ick 13 java generics api
我在我的代码中遇到了一个错误,我使用了错误的密钥从Java地图中获取了一些我认为使用Java泛型强类型的东西.在查看Map Javadocs时,许多方法(包括get和remove)都将Object作为参数而不是类型K(对于定义为Map的Map).为什么是这样?有一个很好的理由还是API设计缺陷?
我认为这是为了向后兼容旧版本的 Map 接口。不幸的是,情况确实如此,但正如你是对的,如果采用正确的类型,那就更好了。
因为如果传递给 get 方法的对象等于映射中存储的任何键,映射就会返回一个值。相等并不意味着它们必须是相同的类型,而是指键和传递的对象的 equal 方法以这样的方式实现,即不同的对象类型相互识别为相等。
当然,这同样适用于删除方法。
有效代码示例,如果 get 方法仅允许 K 类型的参数,则该代码将中断(无法编译):
LinkedList<Number> k1 = new LinkedList<Number>();
k1.add(10);
ArrayList<Integer> k2 = new ArrayList<Integer>();
k2.add(10);
Map<LinkedList<Number>, String> map = new HashMap<LinkedList<Number>, String>();
map.put(k1, "foo");
System.out.println(map.get(k2));
| 归档时间: | 
 | 
| 查看次数: | 2842 次 | 
| 最近记录: |