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

标签 java generics collections map

决定不使用完全通用的 get 方法的原因是什么 在 java.util.Map<K, V> 的界面中.

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

V get(Object key)

代替

V get(K key)

我想知道为什么(remove, containsKey, containsValue 也是一样)。

最佳答案

正如其他人所提到的,get() 的原因等不是通用的,因为您正在检索的条目的键不必与您传递给 get() 的对象的类型相同。 ;该方法的规范只要求它们相等。这遵循 equals() 的方式方法接受一个对象作为参数,而不仅仅是与对象相同的类型。

尽管很多类都有 equals() 可能是普遍事实定义为它的对象只能等于它自己类的对象,在 Java 中有很多地方不是这样的。例如,List.equals() 的规范表示如果两个 List 对象都是 List 并且具有相同的内容,则它们是相等的,即使它们是 List 的不同实现也是如此。 .所以回到这个问题中的例子,根据方法的规范,可能有一个 Map<ArrayList, Something>。我调用get()LinkedList作为参数,它应该检索作为具有相同内容的列表的键。如果get(),这是不可能的是通用的并且限制了它的参数类型。

关于java - Map.get(Object key) 不是(完全)通用的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268721/

相关文章:

java - 在 Java Web 应用程序中放置安全数据

java - 检查 ElementCollection 映射是否有匹配的条目

java - 使用 Spring Boot 提供 gzip 压缩文件

java - 使用函数进行bean比较的库函数?

c# - IEquatables 实现仅在基础 Equals 被覆盖时调用

c# - 泛型方法从父类(super class)获取参数类型

java - 带有类型参数的注解属性

java - 如何在 Java 中使用 Collections.sort()?

java - 从 Set 中删除负值

java - 为什么 ArrayList 有 "implements List"?