2012年6月28日木曜日

Java 7 の try-with-resources をさわってみる

こんにちわ。みけです。

Java6のEOLが今年(2012年)の11月に迫っています。

なので、Java6を使っている人はJava7に切り替え始めましょう。

Javaの最新7の5分の1のバージョンを使っている人(つまりJava1.4を使っている人)はとっととアップデートして下さい。

Java1.4のEOLは2008年10月30日です。

Sunと契約している場合を除いて、契約していない人たちは泣き言を言わずアップデートしましょう。


…以前も同じ事書いた記憶が…

本題


昨日(2012/06/27) java-jaの『Log.debug("nice catch!")』に行って来ました。

開催者のよしおりさん、やましろさん、いつもご苦労さまです。

まあ、ツイッターとかまとめられているので、当日の様子については

そっちを御覧ください。しんやさん本当ご苦労さまです。

で、例外ハンドリングということで、Java7の例外ハンドリング、

try-with-resourcesが話題になったので、少し調べてみました。


ggrks


まあ、調べるったって、ggrだけなんですが、

たくさんエントリーありますね(白目。

なので、詳しい話はそっちを見て下さい。


そうは言っても


僕は自分の指を動かしたことしか理解できない単純な構造をしているので、

他のブログのエントリーと同様にコードを書いてみました。



まあ、テストの形をとっているのが他のブログと少しだけ違うかな。

で、テスト条件は次のWhen.javaというenumです。



enumにメソッドが実装できるのは周知の話で、

今回はenumの各値に条件を返すような実装を与えました。

  • onConstructorメソッドはコンストラクターで例外が発生する・しないを表します。
  • onMethodメソッドはメソッドの途中で例外が発生する・しないを表します。
  • onCloseメソッドはjava.lang.AutoCloseableで定義されているvoid close()メソッドで例外が発生する・しないを表します。

まあ、コード見ればわかりますが、

テスト条件を日本語でメモっとくとこんな感じ。

  • OnConstructorOnly
    • コンストラクター : 発生する
    • メソッド : 発生しない
    • クローズ : 発生しない
  • OnConstructorWithClose
    • コンストラクター : 発生する
    • メソッド : 発生しない
    • クローズ : 発生する
  • OnMethodOnly
    • コンストラクター : 発生しない
    • メソッド : 発生する
    • クローズ : 発生しない
  • OnMethodWithClose
    • コンストラクター : 発生しない
    • メソッド : 発生する
    • クローズ : 発生する
  • OnCloseOnly
    • コンストラクター : 発生しない
    • メソッド : 発生しない
    • クローズ : 発生する
  • NoException
    • コンストラクター : 発生しない
    • メソッド : 発生しない
    • クローズ : 発生しない

そうそう、これやってて気づいたんですが、

enum使えば、デシジョンテーブル系のテストをすんなり記述できますね。

まあ、enumをテスト対象に挟みこむにはインターフェースを使わないと難しいですが…


テスト実行


テスト実行しました。

コンソール出力は次のとおりです。



これをみててわかるのはclose()メソッド中に例外が発生した場合、

  • 例外発生後に例外が発生した場合は握りつぶす!
  • 正常に終了しているときに例外が発生した場合は例外を通知する

という動きをしていますね。

まあ、リソース処理系の例外の処理ってだいたいそうですけどね…


ロギング


ちなみにSlf4jでログを出力していますが、

ログ実装はLog4jです(´・ω・`)

なお、ログ実装については



ってことで、Markerについても覚えておきたいですね。

ちなみに日本語で最も正しいMarkerの使い方は

たいちさんの『設計と実装の狭間』でだそうです。



0 件のコメント:

コメントを投稿