泛型上下文中的java.lang.ClassCastException
我目前正在研究Java中的泛型。到目前为止,我尝试重建一个名为“Liste”(德语)的ArrayList类,然后尝试实现泛型,这样我的列表可以容纳不同的对象,但也可以提供类型安全性 在我的实现中,当我尝试将我的泛型上下文中的java.lang.ClassCastException,java,generics,casting,Java,Generics,Casting,我目前正在研究Java中的泛型。到目前为止,我尝试重建一个名为“Liste”(德语)的ArrayList类,然后尝试实现泛型,这样我的列表可以容纳不同的对象,但也可以提供类型安全性 在我的实现中,当我尝试将我的对象数组强制转换为U(在本例中为Car)数组时,会抛出ClassCastException。我唯一不明白的是,当我没有给出特定的界限(U-extends-Car)时,代码会编译。如果我删除绑定,代码就会编译,一切正常 public class CarListe<U extends C
对象数组强制转换为U
(在本例中为Car
)数组时,会抛出ClassCastException
。我唯一不明白的是,当我没有给出特定的界限(U-extends-Car
)时,代码会编译。如果我删除绑定,代码就会编译,一切正常
public class CarListe<U extends Car> { // doesn't work with bound Car
private U[] array;
private int capacity;
public CarListe(int capacity) {
this.array = (U[]) new Object[capacity]; // the error ocurs in this line
}
}
public-class-CarListe{//不适用于绑定的汽车
专用U[]阵列;
私人int能力;
公共卡里斯特(国际容量){
this.array=(U[])新对象[capacity];//此行中出现错误
}
}
现在是CarListe对象的实例化
public static void main(String[] args) {
CarListe<Car> pkwCarListe = new CarListe<Car>(100);
}
publicstaticvoidmain(字符串[]args){
CarListe pkwCarListe=新的CarListe(100);
}
这是否回答了您的问题<代码>
在运行时被擦除为Car
类型,这会导致(U[])新对象[容量]
被编译为导致问题的(Car[])新对象[容量]
。也许可以代替CarListe
为所有类型的对象创建列表,比如Liste{…}
和更高的具有更具体内容的板条箱类,比如class CarListe extensed Liste{/*add构造函数,等等*/}
。我用我的“普通”列表(公共类CarListe extensed Liste)扩展了我的CarList,它可以工作。非常感谢