使用向量的 Java 警告:对 add(E) 的未选中调用

2022-09-01 13:01:52

有问题的代码位

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));

不太确定这样的错误需要多少信息....


答案 1

问题是上面的代码没有使用泛型

以下方法将起作用:

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

move.add(new Integer(x));

里面的类型名称(在 的情况下,是 元素要保存的类型参数)告诉编译器它应该期望什么类型的对象。<>VectorE

如果尝试添加指定类型的对象(例如,在本例中,尝试添加 to 和 ),将发生编译时错误,指示正在添加不属于预期类型的对象类型。StringVector<Integer>

也就是说,应该尽量不要使用Vector类。出于更多目的,从 Java 集合框架中实现 List(如 ArrayList)的类就足够了,并且性能更好。

编辑

虽然与关于泛型的问题没有直接关系,但Adam Paynter在关于使用自动拳击的评论中提出了一个很好的观点。

从Java 5开始,原语及其包装类,例如 并根据需要在彼此之间自动转换。intInteger

因此,可以将指定为 或文本的值添加到需要 :intintInteger

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

答案 2

这不是一个错误,它只是一个编译器警告。Vector通常是参数化的,所以要摆脱警告,只需使用泛型:

Vector<Integer> moves = new Vector<Integer>();
moves.add(new Integer(x));

推荐