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

StackOverflow https://stackoverflow.com/questions/382

質問

の意味は何ですか 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 注釈)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top