决定不使用完全通用的get方法的原因是什么
在java.util.Map<;K、 V>
为了澄清这个问题,方法的签名是
V get(对象键)
而不是
V get(K键)
我想知道为什么(对于remove、containsKey、containsValue都是一样的)
正如其他人所提到的,之所以get()等不是泛型的,是因为您正在检索的条目的键不必与您传递给get()的对象的类型相同;该方法的规范只要求它们相等。这源于equals()方法如何将对象作为参数,而不仅仅是对象的类型
虽然许多类都定义了equals(),使其对象只能与自己类的对象相等,这一点通常是正确的,但Java中有许多地方并非如此。例如,List.equals()的规范指出,如果两个列表对象都是列表并且具有相同的内容,则它们是相等的,即使它们是List的不同实现。因此,回到这个问题中的示例,根据方法的规范,可以有一个Map<;ArrayList,某物>和使用LinkedList作为参数调用get()。如果get()是泛型的,并且限制了其参数类型,则这是不可能的