Javaでは、throws
ステートメントを持つメソッドをチェックしないようにすることは可能ですか?
例えば
public class TestClass {
public static void throwAnException() throws Exception {
throw new Exception();
}
public static void makeNullPointer() {
Object o = null;
o.equals(0);//NullPointerException
}
public static void exceptionTest() {
makeNullPointer(); //The compiler allows me not to check this
throwAnException(); //I'm forced to handle the exception, but I don't want to
}
}
何もしないこともできる:
public static void exceptionTest() {
makeNullPointer(); //The compiler allows me not to check this
try {
throwAnException(); //I'm forced to handle the exception, but I don't want to
} catch (Exception e) { /* do nothing */ }
}
現実の生活では、これは非常に賢明ではありません。このようなことをすると、エラーが隠されてしまい、その問題が本当は猫であったにもかかわらず、丸一週間犬を探し続けることになりかねません。 (いい加減、少なくともSystem.err.println()
をそこに置いてください - @BaileySが提案したように、ログを取ることがここではベストプラクティスです。)</sub>;
Javaのチェックなし例外は RuntimeException
クラスを継承しています。これらをスローしても、クライアントから catch
を要求されることはありません:
// notice there's no "throws RuntimeException" at the signature of this method
public static void someMethodThatThrowsRuntimeException() /* no need for throws here */ {
throw new RuntimeException();
}
RuntimeExceptionを継承するクラスは
throws` 宣言も必要としません。
そして、オラクルからの一言:
以下はそのガイドラインです:もしクライアントが例外から回復することが合理的に期待できるのであれば、その例外をチェック例外にしてください。クライアントが例外から回復するために何もできないのであれば、それはチェックされていない例外にしてください。