有没有办法将Java方法标记(例如注释)为永不返回?

And*_*lay 9 java eclipse

我刚开始使用新的Eclipse 4.2(Juno)Null Analysis.

在这样的代码:

x = foo();
if (x == null)
    fail("x is null");
return x.bar();
Run Code Online (Sandbox Code Playgroud)

我收到的警告是x可能为空.但它不可能,因为失败总是抛出,因此永远不会回来.(通过更好的程序间分析,它可能会自动确定,但目前似乎没有.)

显然,有一些方法可以重写代码以绕过警告,但我想要的是一种表示失败的方法(例如注释)永远不会返回.

我也尝试使用@SuppressWarnings("null")来抑制警告,但这不起作用.

摆脱警告的一种方法是添加:( assert x != null;假设您已打开设置以在null分析中包含断言)

在GCC C++中我可以做到: void fn __attribute__ ((noreturn))

Lou*_*man 12

一种半传统的方法如下:

public RuntimeException fail(String message) {
  throw new RuntimeException(message);
}
Run Code Online (Sandbox Code Playgroud)

所以你可以写throw fail("x is null").当然,fail总会最终完成投掷,而不是throw,但这足以让编译器放心,该线总是抛出.

  • 作为参考,它是Guava在`Throwables`实用程序类中使用的模式. (4认同)
  • 大多数情况下,您可以以任何一种方式使用它; 如果你不需要向编译器证明任何东西,那么你可以在没有`throw`的情况下调用它. (2认同)