Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
泛型上下文中的java.lang.ClassCastException_Java_Generics_Casting - Fatal编程技术网

泛型上下文中的java.lang.ClassCastException

泛型上下文中的java.lang.ClassCastException,java,generics,casting,Java,Generics,Casting,我目前正在研究Java中的泛型。到目前为止,我尝试重建一个名为“Liste”(德语)的ArrayList类,然后尝试实现泛型,这样我的列表可以容纳不同的对象,但也可以提供类型安全性 在我的实现中,当我尝试将我的对象数组强制转换为U(在本例中为Car)数组时,会抛出ClassCastException。我唯一不明白的是,当我没有给出特定的界限(U-extends-Car)时,代码会编译。如果我删除绑定,代码就会编译,一切正常 public class CarListe<U extends C

我目前正在研究Java中的泛型。到目前为止,我尝试重建一个名为“Liste”(德语)的ArrayList类,然后尝试实现泛型,这样我的列表可以容纳不同的对象,但也可以提供类型安全性

在我的实现中,当我尝试将我的
对象
数组强制转换为
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,它可以工作。非常感谢