次の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];
と機能します。
私が理解している方法は、コンパイル時に、結果のバイトコードはJavaの型消去に置き換えられるため、一般的な参照を持たないということです。
this.array = (V[]) new Object[10];
this.array = (Comparable[]) new Object[10];
Object が Comparable を拡張しないため、行が暗黙的に置き換えられ、キャスト例外が発生するため、ブレークします。Comparables の配列に変更することで解決されます。
これは正しいです?ありがとう!