javac忽略@SuppressWarnings(";all";)

javac忽略@SuppressWarnings(";all";),java,annotations,compiler-warnings,Java,Annotations,Compiler Warnings,我目前有一个枚举,它有一个构造函数,可以为null,并包含以下SuppressWarning注释: @SuppressWarnings("all") public enum TheEnum { ... AN_ENUM_VALUE(null), ... ... private TheEnum(TheEnum ... args) { if (args != null){ ... ... } ... } 我目前正在使用MyEclipse workben

我目前有一个枚举,它有一个构造函数,可以为null,并包含以下SuppressWarning注释:

@SuppressWarnings("all")
public enum TheEnum {
...
AN_ENUM_VALUE(null),
...
...
private TheEnum(TheEnum ... args) {
    if (args != null){
        ...
        ...
    }
...
}
我目前正在使用MyEclipse workbench 10.6,它似乎能够很好地处理注释。然而,在dev机器上编译期间,我收到了与'TheEnum'类相关的警告

奇怪的是,在项目中,到处都有@SuppressWarnings(“unchecked”),而编译器成功地将其拾取并忽略

由于遗留问题,我们必须使用JDK 1.5.017进行编译,但它似乎应该选择“全部”抑制:

[root@xxx]:/opt/jdk1.5.0_17/bin# ./javac -X
  ...
  -Xlint:{all,deprecation,unchecked,fallthrough,path,serial,finally,-deprecation,-   unchecked,-fallthrough,-path,-serial,-finally}Enable or disable specific warnings

关于我应该在哪里查看为什么“所有”都被忽略的问题,有什么建议吗?

首先不要使用它

@SuppressWarnings("all")
说,你做错了什么事。我会尽快取消与任何开发类似代码的开发人员的合同。警告的存在是有原因的,一个笼统的忽略说“我不在乎我的代码是否真的能工作”,就像其他任何东西一样。这与编写单元测试完全相反:全面禁用编译器检查


从“all”判断,可能是一个eclipse扩展。Sun/Oracle Java 6编译器可能只支持以下值:
未选中
路径
串行
最终
故障
弃用
但是,如果注释包含无法识别的警告名称,它们(编译器)可以自由发出警告。但事实并非如此!好的,在这种情况下,我将手动处理它-为了解释,我试图实现一个类似于的层次枚举,TheEnum(null)表示一个比TheEnum(new TheEnum[]{})更可取的基类型。哎哟,这看起来是一个非常糟糕的攻击。使用对象怎么样?你知道,继承、接口等等。我没有亲自用arrays.Hmm攻击一个不安全的多重继承,而是去寻找这个东西,因为为我们发出数千条警告的代码是由ANTLR动态生成的。所以我猜开发代码的开发人员基本上是Terence Parr。很长一段时间以来,我一直在想,为什么编写编译器的人往往拥有最糟糕的编码风格。lolIt很害怕看到有多少人对警告投了反对票,而不是盲目地压制所有的警告。。。警告的存在是有原因的,而“禁用所有健全性检查”从来都不是一个好主意。在我看来,坏主意是主动提出的,如果用户需要提问,就可以对用户可能做错的事情进行建议和猜测<代码>@SuppressWarnings(“all”)
对于由您无法控制的第三方库生成的代码,可以认为是完全正确的。可能是也可能不是,但这是不同的讨论。问题很清楚,“all”是一个扩展,javac不承认这一事实就是正确的答案。