【问题标题】: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];
【问题讨论】:
标签:
java
generics
data-structures
【解决方案1】:
当您使用 new Entry[4096] 创建数组时,您只是创建了 4096 个引用,此时编译器并不关心它们是对 Entry<K,V> 的引用,因为它们将通过类型擦除被删除。请记住,Java 中的泛型只是底层类格式的语法糖。在运行时,泛型不存在。
【解决方案2】:
你不明白哪一部分? Entry<K,V> 是用 K 和 V 参数化的泛型类型。您也可以使用 Entry,它是没有泛型的原始类型(为了向后兼容)。类型擦除后它们是相同的。同样,您可以拥有Entry<K,V>[] 和Entry[]。它们可以相互转换,但会是未经检查的转换。
实际上,您不能在创建数组的组件类型中指定具体参数。您必须执行new Entry[4096] 或new Entry<?,?>[4096]。因此,未经检查的转换是不可避免的。