11

我使用 Eclipse,所以对我来说,我使用//$FALL-THROUGH$注释是 switch 语句等的常见做法。但是我的同事使用 Netbeans 并质疑我到底在用这些做什么。试图用谷歌搜索任何带有符号的东西就像试图用一双冰冻的手套而不用任何工具拔牙......

使用//$FALL-THROUGH$注释、美元符号等等,是标准的 java 事物,还是某种 Eclipse 魔法?如果我在 Netbeans 或另一个 IDE 中加载相同的代码,或者通过独立的 java 编译器运行它,是否会通过 switch 语句仍然标记有警告,即使有上述注释?除了使用注释之外,有没有一种标准的方法可以做到这一点@SupressWarning(考虑到你必须如何使用它,这只会使代码变得混乱)?

4

3 回答 3

12

像这样的事情取决于 IDE/style-check-tool。没有“标准 Java 注释”。

(好吧,Javadocs 是标准的,但它们不控制编译/错误报告。)

eclipse发布文档$FALL-THROUGH$中提到了该构造的解释:

现在可以通过在下面的 case 语句前面加上以 $FALL-THROUGH$ 开头的注释来抑制 switch case 语句中预期的失败的编译器问题。这对于不能使用 J2SE-5.0 样式的 @SuppressWarnings("fallthrough") 注释的代码特别有趣。

请注意,注释的警告名称@Suppresswarnings取决于编译器,而不是 Java 语言标准。

于 2012-10-09T19:38:02.457 回答
3

我见过采用类似评论方案的其他工具(例如 FindBugs)。但没有什么是标准化的。

在大多数情况下,仅当 case 语句包含失败之前的代码时才会引发这些警告。在大多数情况下,您可以通过分解公共代码来避免这种情况。

例如,这通常不会触发警告:

switch (foo) {
  case 1:
  case 2:
    doSomething();
    break;
  ...
}

但这会:

switch (foo) {
  case 1:
    doSomething();
  case 2:
    doSomethingElse();
    break;
  ...
}

我个人认为这些警告是有原因的。我认为重构通用代码并且没有非空的失败更易读(和安全):

switch (foo) {
  case 1:
    doSomething();
    doSomethingElse();
    break;

  case 2:
    doSomethingElse();
    break;
  ...
}
于 2012-10-09T19:44:59.317 回答
2

此注释是特定于 IDE 的,可能会在其他 ide 和代码检查器中失败,尽管 findbugs 足够聪明,可以检查带有单词的注释。但是,无论如何,除了指导其他程序员之外,您不应该依赖注释来做更多的事情,您只是在创建要维护的另一件事。

于 2012-10-09T19:54:43.533 回答