我曾经用过@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 而不是忽略警告。

10-07 16:53