【发布时间】:2013-12-26 19:53:52
【问题描述】:
我知道您不能创建泛型类型的数组,而是必须求助于 hack。 (鉴于 Java 支持泛型数组,而不是它们的创建,我不清楚为什么 hack 比支持创建泛型数组的 Java 更好)
而不是写这个
Map.Entry<K, V>[] entries = new Map.Entry<K, V>[numEntries];
你必须写这个
@SuppressWarnings("unchecked")
Map.Entry<K, V>[] entries = (Map.Entry<K, V>) new Map.Entry[numEntries];
不幸的是,如果你有一个泛型嵌套类型的数组,这不起作用
public class Outer<E> {
final Inner[] inners = new Inner[16]; // Generic array creation
class Inner {
}
}
最好的解决方法似乎是
@SuppressWarnings("unchecked")
final Inner[] inners = (Inner[]) Array.newInstance(Inner.class, 16);
这是最“优雅”的解决方案吗?
我看到了Generic Array Creation Compilation Error From Inner Class,但这里的解决方案更糟糕,恕我直言。
【问题讨论】:
-
我认为您的第一行和第二行代码有些混淆。
entries被声明为(单个)Map.Entry对象,但您正在尝试分配Map.Entry对象的数组。还有,entries怎么也可以是数组维度? -
@TedHopp 感谢您指出这一点。在这两种情况下都是正确的。
-
恕我直言,链接的解决方案是最好的。它必须是一个数组有什么原因吗?
-
"
new (Map.Entry<K, V>) Map.Entry[numEntries];" 应该是(Map.Entry<K, V>) new Map.Entry[numEntries];