80

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

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

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

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

1 に答える 1

54

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

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

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

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

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

于 2008-08-02T08:58:48.430 に答える