当前位置: 首页 > 面试题库 >

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

越国源
2023-03-14
问题内容

Map方法中的此方法和许多其他方法不是通用的。几乎在任何将键值用作参数的地方,它都接受Object,即remove,get和containsKey。

他们为什么做出这个决定的任何想法。我的假设是这样做是为了支持遗留代码,但是对我而言,我认为这是一个弱势地位。

谁能提供给我一个具体的原因,为什么最好在这里接受Object而不是KeyType。


问题答案:

用于检索/删除/检查给定密钥是否存在的对象不必与用于存储给定密钥的对象(=密钥)具有相同的类型。

它必须是equal并且返回与hashCode键相同的键,但是规范中没有任何内容表明它必须是相同的类型。

这个事实很少使用,大多数时候,您将使用与存储键相同的键(或至少具有相同类型的对象)来检索值。

但是,由于这是“旧” HashMap版本中受支持的用例,因此在泛型版本中也需要对其进行支持。

请注意,所有keySet()使用特定类型的方法,因为可以确保put()在调用时完全返回用作键的对象。



 类似资料:
  • 问题内容: Java 7中的JCombobox已更新为使用泛型-我一直认为它还没有做到,这有点疏忽,所以我很高兴看到这一更改。 但是,当尝试以这种方式使用JCombobox时,我意识到我期望使用这些泛型类型的方法仍然会返回 这到底是为什么呢?对我来说,这似乎是一个愚蠢的设计决定。我意识到底层的ListModel有一个通用方法,因此我将改用它- 但这似乎是可以在JComboBox本身上更改的某种回旋

  • 由于这在开发者社区中是一个非常有争议的话题,所以随着我们更深入的理解并结合收到的反馈,我们将不断更新这篇博客。我也想推出一些限定词,所以大家都明白我们来自哪里。 我们的公司由我的联合创始人和首席技术官,瑞恩·坎贝尔领导,一位拥有18年的经验的软件架构师,过去10年在大型企业。 当我们决定使用Angular 2时,他已经熟悉Angular 1了。但是,在决定使用Angular之前,我们还在React

  • 问题内容: 我正在使用JUnit 4.12。断言方法本质上不是通用的。例如,assertEquals方法看起来像: 为什么不是这样? 我觉得需要通用方法声明来更好地进行编译时检查和IDE自动完成。 问题答案: 具有这样的通用方法: 没有避免避免比较不同类型的类型安全:您可以将任何内容传递给此方法,因为它会退化到其上限: 而且也不能使用任何方法和未上找到。因此,基本上就是。 这样,添加泛型只会使实现

  • 参考Java的Fork/Join vs ExecutorService-何时使用哪个?,传统的线程池通常用于处理许多独立请求;用于处理连贯/递归任务,其中一个任务可能会产生另一个子任务并稍后加入。 那么,为什么Java-8的默认使用而不是传统的执行器? 在许多情况下,我们在或之后使用,然后提交一个函数式接口作为参数。从我的角度来看,这些任务是独立的,不是吗?

  • 我相信这是当今最愚蠢的问题,但现在。。。我有一个应用程序,我需要在“内部”分发,供贸易展的销售人员使用。我使用Android Studio(在Windows 7中)成功创建了一个自签名、zipaligned的发布apk文件。不过,输出文件的名称只是app release。阿普克。为什么我的应用程序名没有像MyApplication release一样作为前缀添加到输出文件中。apk?我怀疑这与An

  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容: