特定の Java ジェネリックス キャストにおける型安全性の警告の意味は何ですか?
-
08-06-2019 - |
質問
の意味は何ですか Java の警告?
タイプセーフティ:Object から List<Integer> へのキャストは、実際には消去された型 List に対してチェックしています。
次のコードのように、一般的な情報を含む型にオブジェクトをキャストしようとすると、この警告が表示されます。
Object object = getMyList();
List<Integer> list = (List<Integer>) object;
解決
この警告は、Java が実行時にジェネリックスを使用するオブジェクトに実際には型情報を格納していないために発生します。したがって、もし object
実際には List<String>
, 、 何もないだろう ClassCastException
変数で定義されたジェネリック型と一致しない項目がリストからアクセスされるまでを除き、実行時。
この誤ったジェネリック型情報を使用して項目がリストに追加されると、さらに複雑な問題が発生する可能性があります。リストへの参照を保持しているが、正しいジェネリック型情報を持つコードは、一貫性のないリストを持つことになります。
警告を削除するには、次のことを試してください。
List<?> list = (List<?>) object;
ただし、コンパイラは、間違った型のオブジェクトを追加しようとしているかどうかを認識しないため、add などの特定のメソッドは使用できないことに注意してください。上記は多くの状況で機能しますが、add または同様に制限されたメソッドを使用する必要がある場合は、Eclipse (または SuppressWarning
注釈)。
所属していません StackOverflow