BGGAのクロージャサイト(http://javac.info/) の プロトタイプ実装をいじってみた。 マイコミジャーナルに概要を書いた記事があるようです。 今回いじってみたのは2008-07-07版と2008-07-13版のプロトタイプ実装。 JSRもドキュメントもちゃんと読まずにいじっているけど まあいいや。 1.単純実装の逆コンパイルして中身見る ・クロージャを用いたjavaコード public class SimpleClosure { public static void main(String[] args) { int sum = { int x, int y => x + y }.invoke(3, 4); // return 7 System.out.println(sum); } } ・下のコードは上記コードをコンパイルし、jadで逆コンパイルしたコード import java.io.PrintStream; import javax.lang.function.III; public class SimpleClosure { public SimpleClosure() {} public static void main(String args[]) { static class _cls1 implements III { public final int _2B_invoke(int j, int k) { return j + k; } public final int invoke(int j, int k) { return _2B_invoke(j, k); } } int i = _2B_INSTANCE0.invoke(3, 4); System.out.println(i); } // ↓クロージャの実体(staticのメンバとして記述される) public static final _cls1 _2B_INSTANCE0 = new _cls1(); } 逆コンパイルで気づいた点 ・クロージャの場合実際はstaticメンバとして宣言されるため...
コメント