Java 7の文法上の変更
- http://javanicus.com/blog2/items/212-index.html
- http://hamletdarcy.blogspot.com/2008/12/java-7-update-from-mark-reinhold-at.html
上の参照先にJava7の言語仕様変更に関する具体的な構文がでていたのでちょっとメモ的に。
- cathch節で受け取る例外宣言にfinalを付けることができる。「Safe rethrow 」とか呼ばれている。
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ブロックを簡潔に表記できる。
(感想)
便利そうではあるが|はちとキモイな。
- セーフナビゲーション演算子(?.)。Groovyではおなじみ。
- ジェネリクスに関する型推論。簡潔になる。
- 型アノテーション。制約条件を書いてチェックするツールを作るのが目的のようだ。サンプルツールがダウンロードできる。
Swing Frameworkに私としては期待。Beans Bindingがないのは残念だが。