質問: "MM02"; } else { throw ex; } throw (Exception) new Exception(code, *****); } 例えば上記のような処理をしている実装があったとして、 throw された ex が 03 のときに catch ブロックから(ex は破棄して)抜けたい場合は どのような実装になるのでしょう。 #03 のときには #> throw (Exception) #> new Exception(code, *****); #の処理をしたくない場合です。 #※if 文の中である条件の時 break で抜けるというようなイメージですかね...。 また、そうする為には別の実装方法がありそうでしたら、 ご教示いただければ幸いです。 よろしくお願いいたします。
回答: > さん1 > まずはねぇ、コンパイルできる例を載せようよ。 失礼しました。 全部載せると逆に迷惑になりそうな量だったので、 どう抜き出せばよい(=コンパイルできる)のかがわからず、 例として変更し、抜粋させていただきました。 > nullを返していいのなら、 説明不足でしたが、自分のケースでは null は返せません。 しかし、こういう実装方法もあるということが わかっただけでも感謝です。ありがとうございます。 > さん2 > // "03"の場合の処理 #throw された ex が 03 のときに catch ブロックから(ex は破棄して)抜けたい と書いたように、"03"の場合の処理はしたくないのです。 (="03"の場合は何もしないで catch ブロックを抜けたい) try { try { return aaaa(xxxxx); } catch (XxxException ex) { // "03"じゃなかったら再スロー if (!"03".equals(ex.getXxx()) throw ex; // "03"の場合の処理は何もしない。 } } catch (XxxException ex) { ... } こう書いた時に内側の catch ブロックで ex が "03" のときに そのままスルーされません。 (return が無いとのことで、コンパイルが通りません) > あとは、根本的な問題を解決する方法として、例外階層を見直す、ってのがあるねぇ。 これについては今調査中です。 ありがとうございます。 >ことぶきさん > if文をネストしてみては? 自分の例で書くと、こんな感じでしょうか? try { return aaaa(xxxxx); } catch (ex) { String code; if ("03".equals(ex)) {} else{ if ("01".equals(ex)) { code = "MM01"; } else if ("02".equals(ex)) { code = "MM02"; } throw (Exception) new Exception(code, *****); } } > 呼び出し元は03の例外を知らなくていいってことですよね。 申し訳ありません。 「呼び出し元は03の例外を知らなくていい」 が何を意味するのかがわかりません。 ※同じ意味になるのかわかりませんが、「"03"の場合の処理はしたくない」です。 ---------------------------------------- そもそも、戻り値が必要なメソッド内の try...catch において、 catch ブロックから何もしないで抜けるということ自体が無理なのでしょうか。 さんがおっしゃった、例外階層を見直すしかないんでしょうか。 "03" はそもそも例外として catch しないというような作りに変えて 実装してみます。 ご意見ありがとうございました。