我曾经用过@SuppressWarnings("unchecked")
:
class SomeClass {
public static void main(String [] args) {
Vector v = new Vector();
@SuppressWarnings("unchecked")
v.addElement(new Integer(1_000_000));
// ...
使用javac 8.0版进行编译时,出现以下错误:
error: <identifier> expected
v.addElement(new Integer(1_000_000));
插入符号(^)指向
addElement
方法的左括号,并出现另外一条错误消息,提示缺少分号(;)。第二条消息显示在addElement
右括号附近的插入号。但是,当我将
@SuppressWarnings("unchecked")
移动到class SomeClass{
上方时,如下所示:@SuppressWarnings("unchecked")
class SomeClass {
这两个错误消息都自动消失了。这使我无所适从。
@SuppressWarnings("unchecked")
的位置是否如此重要? 最佳答案
您不得在语句上放置@SuppressWarnings("unchecked")
之类的注释,而只能在声明上放置。
这就是为什么编译器不了解第一个变体的原因:
@SuppressWarnings("unchecked")
v.addElement(new Integer(1_000_000));
那里是非法的,编译器不会理解。
如果要缩小范围,可以将其放在方法上:
@SuppressWarnings("unchecked")
public static void main(String [] args) {
Vector v = new Vector();
v.addElement(new Integer(1_000_000));
因此,将仅忽略
main
方法的警告,而不是整个类的警告。您甚至可以将其放在变量声明中,但不能放在语句中:
@SuppressWarnings("unchecked")
Vector v = new Vector();
但是,正如GhostCat所指出的那样,在这种情况下,最好只是生成 vector 而不是忽略警告。