1. ホーム
  2. java

[解決済み] Java のジェネリックキャストにおける型安全警告の意味は?

2023-07-24 01:39:38

質問

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

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

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

Object object = getMyList();
List<Integer> list = (List<Integer>) object;

どのように解決するのですか?

この警告は、Javaがジェネリックスを使用するオブジェクトに、実際には実行時に型情報を保存していないために出ています。 したがって、もし object が実際には List<String> がない場合は ClassCastException が発生しません。ただし、変数で定義された一般型にマッチしないリストからのアイテムがアクセスされる場合を除きます。

この間違った一般的な型の情報を持つリストへ項目が追加された場合、さらに複雑な事態を引き起こす可能性があります。 リストへの参照をまだ保持しているが、正しい一般的な型の情報を持つ任意のコードは、現在、一貫性のないリストを持つことになります。

警告を取り除くには、試してみてください。

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

ただし、コンパイラは不正な型のオブジェクトを追加しようとしているかどうかわからないため、addのような特定のメソッドを使用することができないことに注意してください。 上記は多くの状況で機能しますが、addや同様の制限のあるメソッドを使用しなければならない場合、Eclipseで黄色の下線(あるいは SuppressWarning アノテーション) を使用する必要があります。