[Java][Groovy] クロージャを駆動するヘルパーを作る
Groovyを便利に使う、と考えたときに標準でもいい加減スゴいが、自分で作りたいときがあるだろう。
ほんとはgroovyで完結してしまえるが、Javaでヘルパー、もしくはライブラリを書くと、再利用性があがるとか、
Eclipseの多彩な支援が使えるとかいいことはいっぱいあります。
で、
[groovy] instance.eachUser("condition") { user | . . }
という風なものをやる場合、Java側はあんまりなにも考えなくていいです。単純に Closure を使うだけです。
[java] public void eachUser(String condition, Closure closure) { List a = dao.getUsers(condition); Iterator i = a.iterator(); while (i.hasNext()) { closure.call( i.next() ); } } むむ。例が悪いな。
クロージャーが複数の引数を持つ場合は、Object[]を使います。
[java] closure.call( new Object[] { userbean, info1, info2 } ); [groovy] instance.eachUser("condition") { |arg1, arg2, arg3| ...... }
明快です。Groovyを「支える」ものを作るのが軽いというのは言語の拡張性というか浸透性には重要な要素だと思うので、大歓迎です。