2

我正在尝试创建一个泛型类“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; cannot be cast to [LArrayBased.DataStruct;) 在最后用三个感叹号标记的行,同时测试它。

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

4

1 回答 1

6

为什么不申报

array = new DataStruct[capacity];

Object[]不能投到DataStruct[]

因为数组本质上是可重构的,这意味着数组在运行时知道它们的类型,所以如果你把它转换成Object []下面的样子,你会再次遇到问题

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

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

于 2012-10-20T16:29:09.443 回答