JDK1.7でClosureが復活するみたい
InfoQの記事によると、JDK1.7でClosureが復活、ただしリリースが延びるとのこと。
JDK1.7のリリースが延びるのは残念ですが、まだ業務的にはJDK1.6の普及もまだまだですので、せっかくのメジャーリリースにClosureが採用されるほうが嬉しいです。
Closureも Simple がついたということで、何が変わったのかと Closureの仕様を見たところ、若干、表記の仕方が変わったみたいですね。
定義と処理が分割して、Lambda記法の結果の型が後ろから、前に移動して、よりJavaプログラマがわかりやすい記述を採用したのですね。
旧: {int,int=>int} plus = {int x, int y => x+y};
新: #int(int,int) plus = #(int x, int y) x+y;
個人的には、"#"を使うとプリプロセッサを使ったコードと相性が悪いため
あと今更ながら気がついたのですが、1つしかメソッドをもたないInterfaceにも Closure を適用できるのは、いままでのライブラリを、そのまま利用できるので良いですね。
これに関してひとつ疑問がでてきました。
Closure間の型変換ってどうなるなるんだろう?
擬似コードで書くと、次の2つのクラスの内部に定義された、funcのクロージャー形は、コンパイルされると別のクラスになると思います。
class A {
#int(int, int) func;
}
class B {
#int(int, int) func;
}
これらの間で、コンパイラでラッパークラスなど作られると、コンパイル後のクラスは異なります。
Closureの場合、クラスの内部変数にもアクセスできるからクラスが分かれるのはしかたないのですが、関数オブジェクトとして使いたい場合、シグネイチャーが一致していると型を一致させてほしいですよね。
あ、外部に公開して共有する場合はinterfaceを書けってことなのかな。
それは、それでありだな。
まだ情報がでてきたら、そのときチェックしよう。
| 固定リンク | コメント (0) | トラックバック (0)


最近のコメント