Hatena::ブログ(Diary)

SiroKuro Page RSSフィード

2009-08-09

RE: 検査例外イケテナイところ

なんとなくしっくりこないので。どこがしっくりこないのか自分でも良く分かってないから、しっくりきてないという表明だけしておきます。

検査例外は発生したその場、もしくは直接の呼出し元で処理しない限り、throws に記述せざるを得ない。

そうしない場合、より上位層の throws を追加する必要が出てくる。このような追加、もしくは変更は、中間のクラスの再リリースという手間も必要となる。

これは、明らかに開放閉鎖原則違反する。

例外について色々と考えてみた - 予定は未定Blog版

開放閉鎖原則に反しているのは、追加・変更の可能性を考慮していない変更前の状態を言うんじゃないかなって思った。十分に開放閉鎖原則考慮したクラスでは、上のような修正を行う必要はそもそも出てこないはず。

あるいは 『throws の縛りがきつい java では、むしろ開放閉鎖原則を強く意識しなければならないのでは』 と言い換えることもできるかもしれない。個人的には強すぎるのが気になるところではあるけど。その意味では @Throws アノテーションは賛成するところであります。

あと、あえて throws を追加することを嫌うならば、後は↓のようにしちゃえばいいのかもね。

try {
    doSomething();
} catch (Exception ex) {
    throw UnsupportedOperationException(ex);
}