1

私は Josh Bloch による効果的な Java を読んでいて、項目 24 に出くわしました: 未チェックの警告を排除します。

その中で、チェックされていない警告を生成するクラスの toArray() メソッドの例を示します。

    ArrayList.java:305: warning: [unchecked] unchecked cast
    found : Object[], required: T[]
    return (T[]) Arrays.copyOf(elements, size, a.getClass());

Object[] を返すことをコンパイラがどのように診断しているかを理解することはできませんか?

その背後にある型消去現象を理解できないかもしれません。

Object[] がどのように返されるのか、誰か説明してもらえますか?

前もって感謝します。

4

1 に答える 1

0

そのAPIドキュメントを確認すると、それははっきりと言っています

public static <T,U> T[] copyOf(U[] original,
                           int newLength,
                           Class<? extends T[]> newType)

3 番目の引数は、newType (返されるコピーのクラス とそのreturnステートメントの状態) を指定し
ます。

Returns:
     a copy of the original array, truncated or padded with nulls to obtain the 
     specified length

戻り値についてもこれを確認し、どちらがより効率的ですか: System.arraycopy と Arrays.copyOf?Object[]

編集: Oracleドキュメントチュートリアルでタイプ消去を確認してくださいhttp://docs.oracle.com/javase/tutorial/java/generics/erasure.html

それは言います:

ジェネリック型のすべての型パラメーターObject(TKV など) をそれらの境界に置き換えるか、型パラメーターが無制限の場合。したがって、生成されたバイトコードには、通常のクラス、インターフェース、およびメソッドのみが含まれます。

于 2013-02-24T07:13:35.357 に答える