Java 我怎样才能摆脱这个ClassCastException?(爪哇)

Java 我怎样才能摆脱这个ClassCastException?(爪哇),java,arrays,exception,object,casting,Java,Arrays,Exception,Object,Casting,我正在尝试创建泛型类“DataStruct”的数组。 代码如下: public class DataArray<T> { DataStruct<T>[] array; int index; public DataArray(int capacity) { array = (DataStruct<T>[]) new Object[capacity]; // !!! this.index = 0; } } 公共类数据数组{ DataStruct

我正在尝试创建泛型类“DataStruct”的数组。 代码如下:

public class DataArray<T> {
DataStruct<T>[] array;
int index;

public DataArray(int capacity) {
    array = (DataStruct<T>[]) new Object[capacity]; // !!!
    this.index = 0;
}
}
公共类数据数组{
DataStruct[]数组;
整数指数;
公共数据阵列(整数容量){
数组=(数据结构[])新对象[容量];/!!!
该指数=0;
}
}
在测试时,我在末尾用三个感叹号标记的行中得到一个java.lang.ClassCastException(Ljava.lang.Object;不能强制转换为[LArrayBased.DataStruct;])

你能告诉我创建它的正确方法吗?

为什么不声明

array = new DataStruct[capacity];
Object[]
无法强制转换为
DataStruct[]

因为数组在本质上是可重复的,这意味着数组在运行时知道它们的类型,所以如果您将其转换为下面的
Object[]
,您将再次遇到问题

Object[] array = new DataStruct[capacity]; 
array[0] = 10;//Array Store exception

因此,明智的做法是将其声明为
DataStruct[capacity]

另一种方法也是不可能的(DataStruct[]无法转换为Object[])@amit数组本质上是共变的,因此
对象是DataStruct的超级类型,因此允许使用其他方法。