Map.get(Object key)不是(完全)通用的原因是什么

问题:

决定没有完全通用的get方法的原因是什么?
java.util.Map<K, V>的界面中
为了澄清问题,方法的签名是
 V get(Object key)
代替
 V get(K key)
我想知道为什么(同样的事情remove, containsKey, containsValue)。

回答:

如其他人所说,get()等不是通用的原因,因为您检索的条目的关键字不必与您传入get()的对象的类型相同;该方法的规范只要求它们相等。这取决于equals()方法如何将Object作为参数,而不仅仅是与对象相同的类型。
尽管很多类都定义了equals(),因此它的对象只能等于其自己类的对象,但是在Java中有很多地方不是这样的。例如,List.equals()的规范说,如果两个List对象都是列表,并且具有相同的内容,即使它们是List的不同实现,两个List对象也是相等的。所以回到这个问题的例子中,根据方法的规范可能有一个Map<ArrayList, Something>,并且我可以用LinkedList作为参数调用get(),它应该检索一个列表内容相同。如果get()是通用的,并且限制其参数类型,这是不可能的。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What are the reasons why Map.get(Object key) is not (fully) generic

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 5