Javaでクロージャ
[id:lethevert:20050824:p1]
せっかくなんで、Javaのことも。
Javaでクロージャと同等のことをするには、無名クラスを使えばいいです。でも、ちょっと記述が面倒だし、ごちゃごちゃとした印象はあります。
abstract class Functor{ abstract void execute(); } public class ObjectA{ PrintStream out; void doExecute(Functor func){ func.execute(); } void writeLine(int _param){ final int param = _param; doExecute( new Functor() { void execute(){ out.println(param); } } ); } }
外側の変数にも触れます。ただし、メソッド内の変数は、final宣言しないとダメです。
ところで、メソッド内の変数をfinal宣言する必要があるというのは、何故なんでしょう? 変数の指すポインタが変わらないことを明示的にするため?
(ところで、関数内のfinalを、一瞬、Cの関数内のstaticと混同して、複数インスタンスの場合は動作がおかしくならないか?と悩んでしまった・・・)