我想知道我是否正确理解了以下 Java 问题。给定一个通用集合,如果我这样做
public class HashTable<V extends Comparable<V>> implements HashTableInterface<V> {
private V[] array;
public HashTable() {
this.array = (V[]) new Object[10];
}
}
代码中断,抛出异常: java.lang.ClassCastException: [Ljava.lang.Object; 不能转换为 [Ljava.lang.Comparable;
但是,如果我更改this.array = (V[]) new Object[10];
为this.array = (V[]) new Comparable[10];
then 它可以工作。
我理解它的方式是,编译后生成的字节码将没有任何通用引用,因为它们被 Java 的类型擦除所取代。
this.array = (V[]) new Object[10];
中断,因为该行将被隐式替换,this.array = (Comparable[]) new Object[10];
然后将导致强制转换异常,因为 Object 不扩展 Comparable。它通过将其更改为 Comparables 数组来解决。
这个对吗?谢谢!