一尘不染

使用Vector的Java警告:未选中的add(E)调用

java

令人反感的代码

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

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


阅读 290

收藏
2020-12-03

共1个答案

一尘不染

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

以下将起作用:

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

move.add(new Integer(x));

<>(如果为VectorE则为要保存的元素的type参数)内部的类型名称告诉编译器应期望的对象类型。

如果尝试添加一个指定类型的对象(例如,在这种情况下,尝试添加String和)Vector<Integer>,则会发生编译时错误,这表明正在使用一种非预期类型的​​对象添加。

就是说,应该尽量不要使用Vector该类。为了更多的目的,List例如ArrayListJava
Collections
Framework
实现的类就足够了,并且性能更好。

编辑

尽管与泛型问题没有直接关系,但亚当·佩恩特(Adam Paynter)在有关使用自动装箱的评论中提出了一个很好的观点。

从Java 5开始,原语及其包装类(例如int和)Integer将根据需要在彼此之间自动转换。

因此,可以将指定为intint文字的值添加到期望包含的类中Integer

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