2

ジェネリック クラス「DataStruct」の配列を作成しようとしています。コードは次のとおりです。

public class DataArray<T> {
DataStruct<T>[] array;
int index;

public DataArray(int capacity) {
    array = (DataStruct<T>[]) new Object[capacity]; // !!!
    this.index = 0;
}
}

テスト中に、最後に 3 つの感嘆符でマークされた行で java.lang.ClassCastException (Ljava.lang.Object; cannot be cast to [LArrayBased.DataStruct;) を取得します。

正しい作り方を教えてください。

4

1 に答える 1

6

宣言しない理由

array = new DataStruct[capacity];

Object[]にキャストできませんDataStruct[]

配列は本質的に再定義可能であるため、配列は実行時にその型を認識していることを意味するため、Object []以下のように変換すると、再び問題が発生します

Object[] array = new DataStruct[capacity]; 
array[0] = 10;//Array Store exception

したがって、次のように宣言するのが賢明ですDataStruct[capacity]

于 2012-10-20T16:29:09.443 に答える