我正在处理一个处理Entry数组的作业。我想出了如何创建它,但我还没有完全理解它是如何工作的。为什么在创建新的Entry数组时,我不需要指定K,V类型?如果你们能提供一些关于它如何运作的见解,我将非常感激。
private Entry<K,V>[] data;
data = new Entry[4096];
答案 0 :(得分:3)
使用new Entry[4096]
创建数组时,您只需要创建4096个引用,编译器此时并不关心它们是Entry<K,V>
的引用,因为它将通过类型擦除来删除。请记住,java中的泛型只是基础类格式的一种合成糖。在运行时,泛型不存在。
答案 1 :(得分:0)
你不明白哪一部分? Entry<K,V>
是使用K和V参数化的泛型类型。您还可以使用Entry
,这是没有泛型的原始类型(为了向后兼容)。类型擦除后它们是相同的。同样,您可以拥有Entry<K,V>[]
和Entry[]
。它们可以在彼此之间进行转换,但它将是未经检查的转换。
实际上,无法在数组创建的组件类型中指定特定参数。您必须执行new Entry[4096]
或new Entry<?,?>[4096]
。因此,未经检查的转换是不可避免的。