一般に、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を返すとは限りませんので、コンパイラは不平を言います。
私の知るところでは、メソッドが常にスローすることを示す特定の注釈はありません。
に別のポストでソリューションを継続ウィルていることを確認し、[ここ](のhttp:/ /stackoverflow.com/a/11249665/1402846)。 – Pang