我正在尝试创建泛型类“DataStruct”的数组。 代码如下:
public class DataArray<T> {
DataStruct<T>[] array;
int index;
public DataArray(int capacity) {
array = (DataStruct<T>[]) new Object[capacity]; // !!!
this.index = 0;
}
}
我得到了一个java.lang.ClassCastException(Ljava.lang.Object;不能强制转换为[LArrayBased.DataStruct;)在末尾标有三个感叹号的行,同时测试它。
您能告诉我创建它的正确方法吗?
答案 0 :(得分:6)
为什么不宣布
array = new DataStruct[capacity];
Object[]
无法投放到DataStruct[]
。
因为数组本质上是可反复的,这意味着数组在运行时知道它们的类型所以如果你将其转换为Object []
,如下所示,你将再次遇到问题
Object[] array = new DataStruct[capacity];
array[0] = 10;//Array Store exception
因此明智地将其声明为DataStruct[capacity]