ページ

2014年3月13日

try-with-resource statementはjava7からだったのか…

※ とあるところで書いたことの転載です

普段、Java7で生活しているとJava6だとめんどうだなー、って感じることがありますよね。みんな早くJava7とかJava8に移行したほうがいいよね。

って言うことで、IO関係の処理ってcloseメソッドってIOExceptionがつきまっとっていて、うざいよね。みんなこんな感じで書いていると思うんだ。

InputStream io = null;

try {
    io = new FileInputStream("somefile")
    いろんな処理
} catch (IOException e) {
    例外処理的な何か
} finally {
    if (io != null) {
        try {
            io.close();
        } catch (IOException e) {
            // なんもしない
       }
    }
}

沢山の行数が必要ですね。Javaはなんと生産性の高いことか!じゃあ、Java7だとどうなるのか、って言うと、

try (InputStream io = new FileInputStream("somefile")) {
     いろんな処理
} catch (IOException e) {
    例外処理的な何か
}

はい、おしまい。余分なことが抜けてスッキリして、必要最小限のことに
CloseableかAutoCloseableのインターフェースを継承している人なら、tryから抜けてfinallyに入る直前に後始末をしてくれます。ちょーべんりー。プログラマは怠惰なものさ、ってきっとATEの誰かが言っています。
自動でクローズされなくても、スコープがtry節の中に限定されるだけでもスッキリします。(変数はなるべく局所化したほうがいい)

でも、プロダクトでJava7に上げてもらえないんですぅ。そんなあなたにlombok。この子さえいれば、さらにハッピーに。


@Cleanup InputStream io = new FileInputStream("somefile")
いろんな処理


@Cleanupは http://projectlombok.org/features/Cleanup.html
もう、魔法ですね。ただしlombokはバイトコードをいじるので、導入には許可をとってからにしましょう。一度、この子に触れると、普通のJavaは書けない体になってしまうので、気をつけましょう。

ちなみに、上の奴はさらに短く…

@Cleanup val io = new FileInputStream("somefile")
いろんな処理

0 件のコメント: