gpt4 book ai didi

java - 似乎在编译期间不考虑@SuppressWarnings

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:50 25 4
gpt4 key购买 nike

为了试验 @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.

如果我将注释移动到主方法声明之前,则警告将被抑制。这里缺少什么?

谢谢。

最佳答案

编译器告诉您使用-Xlint:unchecked 重新编译以获取详细信息。这样做提供了上下文:当您使用@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说:

If a program declaration is annotated with the annotation @SuppressWarnings[...] then a Java compiler must not report any warning [...] if that warning would have been generated as a result of the annotated declaration or any of its parts. (my bold)

您的示例代码仅抑制局部变量声明,而不是方法声明。

更新

奇怪的是,即使您收到的消息从技术上讲显然也不是警告而是注意。使用 -Werror 编译工作正常。使用 -Xlint 选项使其成为警告。

关于java - 似乎在编译期间不考虑@SuppressWarnings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com