gpt4 book ai didi

Java 不允许泛型类的内部类数组

转载 作者:太空狗 更新时间:2023-10-29 22:56:01 24 4
gpt4 key购买 nike

我知道你不能创建泛型数组,相反你必须求助于 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但恕我直言,这里的解决方案更糟糕。

最佳答案

执行以下操作:

@SuppressWarnings("unchecked")
final Inner[] inners = (Inner[])new Outer<?>.Inner[16];

与您的第一个示例等效的是 new Outer.Inner[16] 但这将隔离未经检查的转换并避免原始类型。

关于Java 不允许泛型类的内部类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20475142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com