【问题标题】:How does an Entry<K,V> array in java work? [duplicate]java中的Entry<K,V>数组是如何工作的? [复制]
【发布时间】:2012-03-31 03:55:55
【问题描述】:

可能重复:
Generic array creation error

我正在处理一个处理 Entry 数组的作业。我想出了如何创建它,但我并不完全理解它是如何工作的。为什么新建Entry数组时不需要指定K,V类型?如果你们能提供一些关于它的功能的见解,我将不胜感激。

private Entry<K,V>[] data;


data = new Entry[4096];

【问题讨论】:

  • 你的程序中是K和V类型,还是类型变量?
  • 它们是类型,K代表key,V代表value。

标签: java generics data-structures


【解决方案1】:

当您使用 new Entry[4096] 创建数组时,您只是创建了 4096 个引用,此时编译器并不关心它们是对 Entry&lt;K,V&gt; 的引用,因为它们将通过类型擦除被删除。请记住,Java 中的泛型只是底层类格式的语法糖。在运行时,泛型不存在。

【讨论】:

    【解决方案2】:

    你不明白哪一部分? Entry&lt;K,V&gt; 是用 K 和 V 参数化的泛型类型。您也可以使用 Entry,它是没有泛型的原始类型(为了向后兼容)。类型擦除后它们是相同的。同样,您可以拥有Entry&lt;K,V&gt;[]Entry[]。它们可以相互转换,但会是未经检查的转换。

    实际上,您不能在创建数组的组件类型中指定具体参数。您必须执行new Entry[4096]new Entry&lt;?,?&gt;[4096]。因此,未经检查的转换是不可避免的。

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 2012-01-20
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2015-02-02
      • 2013-07-16
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多