匿名関数として、および関数への参照として定義されたラムダを見てきました。JavaScriptは両方をサポートします:
setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }
これは、JSが多くの力と柔軟性を得るところです。Javaはある程度前者(匿名インターフェースの実装)をサポートしていますが、後者はサポートしていません。Java8の更新については、以下を参照してください。
これらのうちのどちらか(または両方)がラムダの適切な定義であるかは、私にはわかりません。
JSは、これらの機能をサポートする最初の言語ではありません。記憶から言えば、言語愛好家は常にラムダをサポートすることを絶賛しているという小さな話だと思います。
ところで、Javaでは、匿名クラスは通常、引数にその場でクラス定義を渡すために使用されます(swingでよく使用されます)。このようなもの(メモリから、コンパイルされていない):
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
// Handle having the method called in my special widget way
}
}
)
更新
Javaは、8の時点で正式にLambda言語になりました。
次の構文を使用できます。
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
コードソース