Map.get(对象键)不是(完全)通用的原因是什么

决定不使用完全通用的get方法的原因是什么
java.util.Map<K、 V&gt

为了澄清这个问题,方法的签名是

V get(对象键)

而不是

V get(K键)

我想知道为什么(对于remove、containsKey、containsValue都是一样的)

正如其他人所提到的,之所以get()等不是泛型的,是因为您正在检索的条目的键不必与您传递给get()的对象的类型相同;该方法的规范只要求它们相等。这源于equals()方法如何将对象作为参数,而不仅仅是对象的类型

虽然许多类都定义了equals(),使其对象只能与自己类的对象相等,这一点通常是正确的,但Java中有许多地方并非如此。例如,List.equals()的规范指出,如果两个列表对象都是列表并且具有相同的内容,则它们是相等的,即使它们是List的不同实现。因此,回到这个问题中的示例,根据方法的规范,可以有一个Map<ArrayList,某物&gt和使用LinkedList作为参数调用get()。如果get()是泛型的,并且限制了其参数类型,则这是不可能的

发表评论