java - 为什么 java.util.Map.get(...) 不是通用的?

标签 java generics map

<分区>

Possible Duplicate:
What are the reasons why Map.get(Object key) is not (fully) generic

此方法和 Map 接口(interface)中的许多其他方法都不是通用的。几乎任何需要键值作为参数的地方,它都会接受 Object,即 remove、get 和 containsKey。

关于他们为什么做出这个决定的任何想法。我的假设是这样做是为了支持遗留代码,但对我来说,我认为这是一个薄弱的位置。

谁能给我一个具体的理由,说明为什么在这里接受 Object 而不是 KeyType 会更可取。

最佳答案

用于检索/删除/检查给定键是否存在的对象不一定与用于存储它的对象(= 键)属于同一类型。

它需要相等并返回与键相同的hashCode,但规范中没有任何内容表明它必须属于同一类型。

这个事实很少被使用,大多数情况下,您将使用与用于存储它们的键相同的键(或至少是相同类型的对象)检索值。

但由于这是“旧”HashMap 中受支持的用例,它也需要在泛型版本中得到支持。

请注意,keySet() 使用特定类型的所有方法,因为当 put() 被调用时,它肯定会准确返回用作键的对象。

关于java - 为什么 java.util.Map.get(...) 不是通用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4677804/

相关文章:

.net - 如何尽快删除 SortedDictionary 的第二个元素?

c++ - 使用 std::stack 和 std::map 内存使用率意外高

Java:按长度对单词列表进行排序,然后按字母顺序排序

java - Spring MVC : Dynamic 404 page

java - 在方法范围内限制泛型参数

java - 我知道 Java 不支持泛型数组,但我不知道如何解决这个问题,以便它可以工作

python - 如何在 Python 中使用 "map"函数? (如何重写 for 循环?)

java - 如何使用 Java 代码在 selenium 中为 Chrome 浏览器设置代理

java - 如果两个对象引用指向同一个可序列化对象,在 java 中序列化期间会发生什么?

java - TextView 不会根据 SeekBar 进度自动更新