Javaは、多くの面で言語をシンプルに保ちたいと考えていたため、基本的に(そして今では矛盾しているように聞こえるかもしれませんが)、設計のクロージャを除外しました。
ただし、初日v1.1以降、Javaは同じ機能をサポートしていますが、パラダイム(関数型とOO)を混在させる代わりに、ほぼ同じ目的で機能する匿名の内部クラスの存在を許可しました。それらはクロージャーではなくクラスなので、さらにいくつかの文字を入力する必要があります。
したがって、たとえば、実行するブロックとしてTimerTaskを受け取るTimerを作成するには、次のように記述します。
Timer timer = new Timer();
timer.schedule( new TimerTask() { // this is like the code block.
public void run() {
System.out.println("Hey!");
}
},0);
ご覧のとおり、「TimerTask(){...」は匿名内部クラスの定義です。そのインスタンスは、引数として渡された変数にも割り当てることができます。
TimerTask task = new TimerTask() {
public void run() {
}
};
....
timer.schedule( task , 0 ) ;
この種の構成を持つことができますが、それらはクロージャーではありません。
クロージャは、Javaプログラミング言語に追加するためにまだ議論中です。
ジョシュア・ブロックによる興味深い話は次のとおりです。「閉鎖論争」
これは「Java言語を進化させるための原則」に関する記事です。