令人反感的代码
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则为要保存的元素的type参数)内部的类型名称告诉编译器应期望的对象类型。
<>
Vector
E
如果尝试添加一个指定类型的对象(例如,在这种情况下,尝试添加String和)Vector<Integer>,则会发生编译时错误,这表明正在使用一种非预期类型的对象添加。
String
Vector<Integer>
就是说,应该尽量不要使用Vector该类。为了更多的目的,List例如ArrayList从Java Collections Framework实现的类就足够了,并且性能更好。
List
ArrayList
编辑
尽管与泛型问题没有直接关系,但亚当·佩恩特(Adam Paynter)在有关使用自动装箱的评论中提出了一个很好的观点。
从Java 5开始,原语及其包装类(例如int和)Integer将根据需要在彼此之间自动转换。
int
Integer
因此,可以将指定为int或int文字的值添加到期望包含的类中Integer:
Vector<Integer> v = new Vector<Integer>(); v.add(5); // Not necessary to use an Integer value.