1. ホーム
  2. java

[解決済み] ベクターを使用したJavaの警告:add(E)の未チェックの呼び出し

2022-02-11 06:29:58

質問

問題のあるコードのビット

Vector moves = new Vector();

moves.add(new Integer(x));

エラーです。

ConnectFour.java:82: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.Vector moves.add(new Integer(x));

このようなエラーの場合、どれくらいの情報が必要なのかよくわからないのですが......。

解決方法は?

問題は、上記のコードで ジェネリックス .

以下のようにするとうまくいきます。

Vector<Integer> moves = new Vector<Integer>();

move.add(new Integer(x));

の中の型名は <> (の場合)。 Vector の場合、型パラメータ E は、コンパイラにどのようなタイプのオブジェクトを期待すべきかを伝えます。

指定された型のオブジェクトを追加しようとした場合、例えばこの場合は String に、そして Vector<Integer> の場合、コンパイル時にエラーが発生し、期待された型ではないオブジェクトの型が追加されていることが示されます。

ということで、なるべく Vector クラスがあります。より多くの目的のために List というような ArrayList から Java Collections フレームワーク で十分であり、より良いパフォーマンスである。

編集

ジェネリックに関する質問とは直接関係ありませんが、Adam Paynterがコメントでauto-boxingの使用について良い点を挙げています。

Java 5以降、プリミティブとそのラッパークラス、例えば intInteger は、必要に応じて自動的に相互変換されます。

そのため、"A "として指定された値を、"B "として指定された値に追加することが可能です。 int または int リテラルを期待するクラスに Integer :

Vector<Integer> v = new Vector<Integer>();
v.add(5);    // Not necessary to use an Integer value.