我正在与一个Entry数组交易的转让。我想出了如何创建它,但我不完全理解它是如何工作的。为什么在创建新的Entry数组时,我不需要指定K,V类型?如果你们能够提供一些关于它如何运作的见解,我将不胜感激。
private Entry<K,V>[] data;
data = new Entry[4096];
我正在与一个Entry数组交易的转让。我想出了如何创建它,但我不完全理解它是如何工作的。为什么在创建新的Entry数组时,我不需要指定K,V类型?如果你们能够提供一些关于它如何运作的见解,我将不胜感激。
private Entry<K,V>[] data;
data = new Entry[4096];
当您使用new Entry[4096]
数组你只是创建4096名的引用,编译器不会在这一点上,他们是因为将通过类型擦除拆下来Entry<K,V>
引用在意。请记住,java中的泛型只是基础类格式的合成糖。在运行时,泛型不存在。
哪部分你不明白? Entry<K,V>
是使用K和V进行参数化的泛型类型。您还可以使用Entry
,这是没有泛型的原始类型(用于向后兼容)。类型擦除后它们是相同的。同样,您可以有Entry<K,V>[]
和Entry[]
。它们可以在彼此之间进行转换,但它将是一个未经检查的转换。
其实不能在数组创建的组件类型中指定了具体的参数。您必须执行new Entry[4096]
或new Entry<?,?>[4096]
。所以未经检查的转换是不可避免的。
你的程序中是K和V类型还是类型变量? – Jochen 2012-03-14 17:01:28
它们是类型,K表示键,V表示值。 – kubiej21 2012-03-14 17:03:45