java中的Entry <k,v>数组如何工作?</k,v>

时间:2012-03-14 16:43:32

标签: java generics data-structures

  

可能重复:
  Generic array creation error

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

private Entry<K,V>[] data;


data = new Entry[4096];

2 个答案:

答案 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]。因此,未经检查的转换是不可避免的。