Javaで例外が起きうるコードを書いていると、あるIDEが try/catch
をつけるか、thorws Exception
をつけるかをサジェストしてきた.
それぞれが何を意味していて、いかに使い分ければ良いか.
サンプルコード
try/catch
.java
public void someMethod() {
try {
// do something which might fail.
} catch (Exception e) {
// handle the failure.
}
}
throws Exception
.java
public void someMethod() throws Exception {
// do something which might fail.
}
ハンドルするか/エラーを投げるか
2つの方法には大きな違いがある.
try/catch
: エラーを飲み込む.
catch内部でrethorwしないとすると、メソッドのtry内部でエラーが発生したとしても、呼び出し元はそのエラーを見ない. そのため、メソッド内部で完璧にエラーを飲み込んでハンドルし、メソッドの目的(呼び出し元が期待する戻り値や処理)を果たすことに気をつける必要がある.
特定のエラー後に行いたい処理がある場合、try/catchを使うと書けそう.
throws
: エラーを呼び出し元に伝える.
throw
を使っているメソッド内部で、エラーが発生した場合は、そのメソッドの呼び出し元がエラーをハンドルする必要がある.
メソッド宣言において、こういうエラーを投げうるということを宣言する意味がある.(そうすることで、呼び出し元にエラーハンドリングが推奨される.)
Rubyで言うと、throws
はデフォルトで、try/catch
は begin/rescue
に対応するのかなと思った.