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使っていない人はSlf4jもう使うなよ #java_ja
— mike_neckさん (@mike_neck) 6月 27, 2012
ってことで、Markerについても覚えておきたいですね。
ちなみに日本語で最も正しいMarkerの使い方は
たいちさんの『設計と実装の狭間』でだそうです。
0 件のコメント:
コメントを投稿