Java8のラムダさん、コレクションの操作ばかりに目が行ってたけどリソースのオートクローズとかええんちゃうん。ええんちゃうん
なるほど、確かに AutoCloseable は Functional Interface だ。
public interface AutoCloseable { void close() throws Exception; }
なので Lambda が使える!
try (AutoCloseable ac = () -> {}) { }
……ここからの発展が思いつかない。とりあえず実行される順番でも確認しとく?
try (AutoCloseable ac = () -> { System.out.println("close!"); }) { System.out.println("try!"); throw new Exception(); } catch (Exception e) { System.out.println("catch!"); } finally { System.out.println("finally!"); }
ほい。
try! close! catch! finally!
だからどうした(´・ω・`)
try with resourceが空気になるけども
追記
なるほど、ローンパターン。
reader("input.txt", in -> { // ファイルを使う処理 });
どうしてもScalaのようなカリー化もできないし、Groovyのように引数の最後がクロージャだったら外に出せるわけでもないので、どうしても制御構造ぽく見せることは出来ないけど、出来なくはない。表現力の幅は広がるかな。
*1:書き方は Lambdaの書き方をさくっと - 日々常々 を参照のこと。