JunkUtil 1.0.3 クロージャを実装
2011-09-20 08:41 (by coffee)

クロージャを実装

JunkUtil 1.0.3では、LzList、LzMapそれぞれにメソッドforEachが実装されました。 このメソッドは、クロージャを実現するためのものです。

LzList#forEachの引数にLzListClosureの匿名クラスを、LzMap#forEachの引数にLzMapClosureの匿名クラスを利用することで、それぞれクロージャを実現しています。

匿名クラスからは、final変数を参照できるため、以下のような記述が可能です。

public void testLzClosure() throws Exception {
    List list1 = Arrays.asList(new String[]{"AAA", "ABB", "CCC"});
    final String var = "A";
    LzList grep = new LzList(list1).forEach(new LzListClosure(){
        public boolean process(int i, int len, Object obj) {
            String str = (String)obj;
            return str.startsWith(var);
        }
    });
    assertTrue(grep.equals("[AAA, ABB]"));
}

上記のサンプルは冗長でしょうか?

しかしこのクロージャ機能は、Beanの入ったListやMapを処理するときにこそその真価を発揮します。

特定のBeanだけを抜き出すクロージャ、特定のBeanだけ更新するクロージャ、全てのBeanの共通メソッドを呼び出すクロージャ、などなど。プログラマはクロージャを書き名前をつけ再利用することができます。

クロージャを完全にマスターしたとき、プログラマはもはや多くのfor文が要らなくなったことに気付くでしょう。

JunkUtil project news list