【问题标题】:How to unconditionally exit/return a void method?如何无条件退出/返回 void 方法?
【发布时间】:2014-02-07 20:50:36
【问题描述】:
void A() {
  B();

  // return; <- compiler error "unreachable code"

  if (true) return; // <- this works

  // code that I will test later
  ...
  C(); 
  D();
}

这就是我现在所做的。是否有一个简单的“exit;”或“return;”在不使用if 的情况下不会产生"unreachable code" 错误?


只是为了说清楚:if (true) return; 有效(带有警告“死代码”,我不在乎并且可以压制)!
如果我只是使用return; 只有那么我会得到"unreachable code" 错误。

注意:一个简单的“这不能不使用if”也是可以接受的答案,提供参考。

【问题讨论】:

  • 如果你只想测试 B() 为什么不直接调用 B()?考虑将你的代码“切割”成更小的方法来自己测试。作为一个想法,我这些天写的大多数方法都在十行以下。这需要一些思考,但这将解决您的问题而无需任何麻烦。只需使用最小的方法并在此级别上编写单元测试。
  • 如果您想避免警告,请使用混淆的true - 例如,调用另一个始终返回true 的方法,或使用设置为truestatic 布尔值.

标签: java return


【解决方案1】:

问题是有:

if (true) return;

它总是会调用return,因此后面的代码是无法访问的。如果您使用真实条件,则不会出现此警告。

但是,如果您只是想测试部分方法,我建议您只评论稍后将要测试的方法的其余部分。

【讨论】:

  • 这不是真的。 if (true) return; is “可达”之后的代码 - 没有错误。我只收到一个我不关心的警告“死代码”。也许这是特定于平台/编译器的?请阅读我的编辑。
  • @kobik - 你怎么能得到c(); 声明,而if(true) return; 坐在那里??
  • @HotLicks,我不想去C(); - 我想做的是伪exit; 或简单的无条件 return; (例如在 JS 中是可以接受的)不使用任何 ifs。
  • @kobik - 这就是为什么你使用总是返回 true 的方法,而不是文字 true。在这种情况下,编译器不会“优化掉”方法的其余部分。
  • 不,Java 不支持这一点,因为在一般情况下它没有“意义”。 (Java 编译器这样做并且必须进行相当强大的控制流分析是有充分理由的。)
【解决方案2】:

如果(真)返回;

这个语句产生了一个无法访问的代码错误,因为编译器知道这个if 块肯定会被执行(因为你已经设置了true 条件)。您的 if 块包含 return 语句,这意味着在下面的语句中,不会执行。因此你得到"unreachable code" 错误。

【讨论】:

    【解决方案3】:

    为什么不直接注释其余代码?

    void A() {
      B();
    
      /* code that I will test later
      C(); 
      D();
      */
    }
    

    【讨论】:

      【解决方案4】:

      不,Java 不支持在代码块中间进行无条件返回,因为在一般情况下它没有“意义”。 (Java 编译器确实并且必须进行相当强大的控制流分析是有充分理由的,如果编译器允许它,JVM 验证器仍然会拒绝它。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多