特定のJavaジェネリックキャストの型安全性警告の意味は何ですか?

Translate

の意味は何ですかJava警告?

型安全性:ObjectからList <Integer>へのキャストは、実際には消去された型Listに対してチェックしています。

次のコードのように、オブジェクトを一般的な情報を持つ型にキャストしようとすると、この警告が表示されます。

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
This question and all comments follow the "Attribution Required."

すべての答え

Translate

この警告は、Javaが実行時にジェネリックを使用するオブジェクトに型情報を実際に格納していないために発生します。したがって、object実際にはList<String>、 何もないだろうClassCastException変数で定義されたジェネリック型と一致しない項目がリストからアクセスされるまでを除いて、実行時。

これにより、アイテムがリストに追加され、この誤ったジェネリック型情報が使用されると、さらに複雑になる可能性があります。リストへの参照を保持しているが、ジェネリック型の情報が正しいコードには、一貫性のないリストが含まれるようになります。

警告を削除するには、次のことを試してください。

List<?> list = (List<?>) object;

ただし、コンパイラは、誤ったタイプのオブジェクトを追加しようとしているかどうかを認識しないため、addなどの特定のメソッドを使用できないことに注意してください。上記は多くの状況で機能しますが、addまたは同様に制限された方法を使用する必要がある場合は、Eclipseで黄色の下線を引く必要があります(またはSuppressWarning注釈)。

ソース