一般に、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 を返すとは限らないと不平を言うからです。
私の知る限り、メソッドが常にスローすることを示す特定の注釈はありません。