为了试验@SuppressWarnings
注释,我编写了以下示例程序:
public class Test {
public static void main(String[] args) {
@SuppressWarnings("unchecked")
Set set = new HashSet();
Integer obj = new Integer(100);
set.add(obj);
}
}
但是,即使经过此注释,我仍会在控制台上得到以下输出:
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
如果我将注释移到主方法声明之前,那么将禁止显示警告。
这里缺少什么?
谢谢。
最佳答案
编译器告诉您Recompile with -Xlint:unchecked for details.
这样做提供了上下文:当您使用@SuppressWarnings
注释声明时,您还将调用通用方法作为原始操作。
Test.java:9: warning: [unchecked] unchecked call to add(E) as a member of the raw type Set
set.add(obj);
^
where E is a type-variable:
E extends Object declared in interface Set
如果将
@SuppressWarnings
整体移至main
方法,则警告消失。The JLS section on
@SuppressWarnings
说:如果程序声明使用注释
@SuppressWarnings
进行注释,则Java编译器如果该注释声明或其任何部分的结果已作为生成,则不得报告任何警告。 (我的粗体)您的示例代码仅禁止局部变量声明,而不禁止方法声明。
更新
奇怪的是,即使您收到的消息在技术上显然也不是警告,而是注释。使用
-Werror
进行编译就可以了。使用-Xlint
选项会发出警告。