例外処理はjavaの基本であるが、認識違いをしていたので備忘録として残す。
発生した問題
メソッドの呼び出し元に例外を投げたかったので、catchした例外をスローしようとすると、なぜかコンパイルエラーになっていた。
実装
例えばタイムアウトエラーを投げる場合は以下の通りである。
public void foo(){
try {
fetch();
} catch (SocketTimeoutException e) {
}
}
public Integer fetch(){
try {
//Http通信
} catch (SocketTimeoutException e) {
throw e;//ここでコンパイルエラー
}finally {
}
return number;
}
認識違い
throwのほかに
thorws句というのがあるがこれはcatch文と同じ働きがあると思っていた。しかし実際それがあるメソッドは例外を投げる可能性がるメソッドという意味であった。
そこで例外をスローしているメソッドにthrows句を付け足すとコンパイルエラーが消え、foo()でキャッチできるようになった。
感想
基礎の基礎で躓くとは思わなかったが、今のうちに知れてよかった…