javac无视@SuppressWarnings("全部")

jty*_*ler 5 java annotations compiler-warnings

我目前有一个Enum,它有一个构造函数,可以取null并包含以下SuppressWarning批注:

@SuppressWarnings("all")
public enum TheEnum {
...
AN_ENUM_VALUE(null),
...
...
private TheEnum(TheEnum ... args) {
    if (args != null){
        ...
        ...
    }
...
}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用MyEclipse工作台10.6,它似乎很好地拿起了注释.但是,在开发机器上进行编译时,我会收到与'TheEnum'类相关的警告.

奇怪的是,在项目中,整个地方都有@SuppressWarnings("unchecked"),编译器设法选择这些并忽略它们就好了.

由于遗留问题,我们必须使用JDK 1.5.0_17进行编译,但它看起来应该选择"全部"抑制:

[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
Run Code Online (Sandbox Code Playgroud)

关于我应该看看为什么"全部"被忽略的任何建议?

Ano*_*sse -2

首先不要使用它。

@SuppressWarnings("all")
Run Code Online (Sandbox Code Playgroud)

说,你做错了什么。我会尽快取消与任何开发此类代码的开发人员的合同。警告的存在是有原因的,而一揽子忽略则表明“我不在乎我的代码是否真的有效”,就像其他任何事情一样。这与编写单元测试完全相反:全面禁用编译器检查。

http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/javac.html#options来看,“all”可能是一个eclipse扩展。Sun/Oracle Java 6编译器可能仅支持以下值:uncheckedpathserialfinallyfallthroughdeprecation

  • 在我看来,坏主意是主动提供风格建议,并猜测用户在需要提出问题时可能做错了什么。对于您无法控制的第三方库生成的代码,`@SuppressWarnings("all")` 可能被认为是完美的。可能是也可能不是,但这是不同的讨论。问题很清楚,“all”是一个扩展且不被 javac 识别这一事实是正确的答案。 (3认同)
  • 哎哟,这看起来像是一个**非常非常糟糕的黑客**。使用对象怎么样?你知道,有继承、接口等等。而不是用*数组*自己破解不安全的多重继承。 (2认同)