「再考するJava」よんだ。関数オブジェクト in Javaとか。

じゅんいち☆かとうさんのJava連載がはじまると聞いてWEB+DB PRESSを買いました。

WEB+DB PRESS Vol.63

WEB+DB PRESS Vol.63

  • 作者: 竹迫良範,和田卓人,おにたま,中島聡,角田直行,はまちや2,上谷隆宏,青木俊介,大塚知洋,生尾剛士,大和田純,永安悟史,馬場俊彰,久保達彦,白土慧,じゅんいち☆かとう,太田昌吾,小野修司,ミック,嶋田裕二,個々一番,みやけん,清水亮,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/06/24
  • メディア: 大型本
  • 購入: 20人 クリック: 434回
  • この商品を含むブログ (22件) を見る

「再考するJava」って連載名、カッコいいですね。

で、読んでみたら、関数オブジェクトとか関数合成とか出てきたヨ。。。

焦ってちょっとおさらいしたので、メモ。

関数オブジェクトの真似事 in Java

関数オブジェクトぽいことをJavaでするには、次の方法がある。

  1. 何らかの振る舞いを期待するメソッドを宣言したインタフェースを作る
  2. 「何らかの振る舞い」を無名インナークラスで実装したインスタンスを作る=オブジェクトA
  3. オブジェクトAを処理対象のインスタンスと一緒にメソッドBに渡す

骨格実装は、関数ポインタの代用の振る舞いをさせるために使えるイディオムなんですね。

なお、『Effective Java 第2版』の項目21「戦略を表現するために関数オブジェクトを使用する」が、この話題を扱っている。

繰り返し使うなら、骨格実装せず、private static finalのフィールドにすることも考えよ、と書いてある。

インタフェースで宣言するメソッドのは、考え方次第みたい。

関数オブジェクトは通常一つのメソッドを持つインタフェースとして表現され、通常は無名のインナークラスとして実装される。

関数ポインタを忠実に(?)再現したければ、「一つのメソッド」にこだわるのかも。そうする理由は、いまいち想像がつかないけれども。

もちろん、次の記事にあるように、インタフェースには複数のメソッドを定義できる。

guava-libraries

記事に出てきたguava-librariesを初めて使ってみた。どう読むんだろう。ぐゎば?

とりあえず写経しただけなので、コレクションまわりしか触ってない。あとでもうちょっと見てみる。

そういえば、p.131 リスト12で、ImmutableList、Collectionになってるけれども、それぞれ、ImmutableList、Collectionのような気がする。

そのうちここに載るかな?