uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Java 7の文法上の変更

上の参照先にJava7の言語仕様変更に関する具体的な構文がでていたのでちょっとメモ的に。

try {
  ...
} catch (final Throwable t) {
  throw t;
}

この目的は、「catchした例外を、(なんかして)、そのまま rethrowする」というような、というような、透過的な例外の処理をする際に生じる問題を解決すること。例えば、「何でもいいから起きた例外をロギングする」という場合、

  ..
} catch (Throwable t) {
   System.out.println(t);
   throw t;
}

とするわけだが、これだとこのcatch節を含むメソッド全体にthrows Throwable;という例外宣言をする(かあるいはtryで囲む)ことになる。実際には起きる例外が変わったわけじゃないのに。なのでcatch (final Throwable t) のようにfinalつけると、例外宣言変更とか例外の周囲をいじらずに、キャッチした例外をそのまま上げることが可能になる。
(感想)
使うシチュエーションは限られていそうだがはまれば嬉しそう。フレームワーク内とかでは使うかな?予約語使い回しっぽくて、検索性が悪そうだな。

catch (IOException|SQLException ex) {

みたいな。同内容のcatchブロックを簡潔に表記できる。
(感想)
便利そうではあるが|はちとキモイな。

Swing Frameworkに私としては期待。Beans Bindingがないのは残念だが。