一般来说,Java 编译器不会传播方法“总是”抛出异常的信息,因此不会检测到所有代码路径是否完整。
(这是因为 Java 编译器独立编译每个类)。
当你想写这样的东西时,这是一个问题。
public class ErrorContext {
public void fatalISE(String message) {
String context = "gather lots of information about the context of the error";
throw new IllegalStateException(context +": " + message);
}
}
public class A {
public MyObject myMethod() {
if (allIsGood()) {
return new MyObject();
}
ErrorContext.fatalISE("all is not good");
}
}
(即,一种收集上下文信息的“断言助手”)。
因为编译器会抱怨 myMethod 并不总是返回一个 MyObject。
据我所知,没有特定的注释表明方法总是抛出。