当我编译这段代码时:
public class OuterClass<T>
{
class InnerClass
{
T temp;
}
private InnerClass[] theArray;
public OuterClass(int size){
this.theArray = new InnerClass[size];
}
}
我收到此错误:OuterClass.java:10: error: generic array creation
this.theArray = new InnerClass[size];
所以我的 问题 #1 是:为什么创建一个 InnerClass 数组有问题?毕竟,它是一个对象数组,而不是泛型类型。我的 问题 #2 是:为什么修改代码(见下文)可以解决问题?
public class OuterClass<T>
{
class InnerClass<U> //changed this line
{
T temp;
}
private InnerClass<T>[] theArray; //changed this line
public OuterClass(int size){
this.theArray = new InnerClass[size];
}
}
最佳答案
想想你在这里实例化的是什么类型的数组。在第一种情况下,它是一个
OuterClass<T>.InnerClass[]
请注意,此类型是参数化类型( <T>
)和 you are not allowed to create arrays of parameterised types .在第二种情况下,由于
InnerClass
的声明被参数化,名称“InnerClass
”实际上指的是raw type (因为您没有指定类型参数),并且因为它是原始类型,所以您创建的数组类型变为:OuterClass.InnerClass[]
请注意 OuterClass
也会丢失其类型参数,因为您使用的是原始类型。这现在不是参数化类型,因此您可以创建这样的数组。
关于java - 包含泛型成员的类数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66270872/