当在泛型类中构造泛型数组时,若使用下面的构造方法,则会抛出异常:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
例:
public LinearList() {
arr = (T[])(new Object[this.maxSize]);
size = 0;
}
public LinearList(int maxSize) {
this.maxSize = maxSize;
arr = (T[])(new Object[this.maxSize]);
size = 0;
}
原因是这种构造方法构造出的数组实际上运行时仍然是Object[],而不是T[]。
解决办法:
使用如下的构造方法,通过类型标记得到T[]:
public LinearList(Class<T> type) {
arr = (T[])(Array.newInstance(type, maxSize));
size = 0;
}
public LinearList(Class<T> type, int maxSize) {
arr = (T[])(Array.newInstance(type, maxSize));
size = 0;
}