违反一点代码
Vector moves = new Vector();
moves.add(new Integer(x));
Run Code Online (Sandbox Code Playgroud)
错误:
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));
Run Code Online (Sandbox Code Playgroud)
不确定这样的错误需要多少信息....
coo*_*ird 34
问题是上面的代码没有使用泛型.
以下将有效:
Vector<Integer> moves = new Vector<Integer>();
move.add(new Integer(x));
Run Code Online (Sandbox Code Playgroud)
<>(在要保持的元素Vector的类型参数的情况下)中的类型名称E告诉编译器它应该期望什么类型的对象.
如果试图添加一个具有指定类型的对象,例如在这种情况下,尝试添加一个Stringto Vector<Integer>,则会发生编译时错误,表明某种类型的对象不是预期类型的添加.
也就是说,应该尽量不要使用这个Vector类.欲了解更多的目的,实现一类List,如ArrayList从Java集合框架就足够了,而且性能更好.
编辑
虽然与泛型问题没有直接关系,但Adam Paynter在关于使用自动装箱的评论中提出了一个很好的观点.
由于Java 5,原语和其包装类,例如int和Integer将相互之间被自动转换为必要的.
因此,可以将指定为int或int文字的值添加到期望以下的类中Integer:
Vector<Integer> v = new Vector<Integer>();
v.add(5); // Not necessary to use an Integer value.
Run Code Online (Sandbox Code Playgroud)
这不是错误,只是编译器警告。vector通常是参数化的,因此要摆脱警告,只需使用泛型即可:
Vector<Integer> moves = new Vector<Integer>();
moves.add(new Integer(x));
Run Code Online (Sandbox Code Playgroud)
如果您别无选择,只能使用非通用数据结构,您可以@SuppressWarnings("unchecked")在方法的开头放置以消除警告。
仅当您别无选择只能使用非通用向量时才这样做。当您使用较旧的库或 Java 运行时库的某些部分时,通常会发生这种情况。
| 归档时间: |
|
| 查看次数: |
33334 次 |
| 最近记录: |