Java 7でのクロージャ[複製]
質問
この質問にはすでに回答があります:
- Java 7の閉鎖[終了] 7つの答え
クロージャーは、来年の夏頃にリリースされる予定の次のJava標準で導入されると聞いています。
この構文はどのように見えますか?
Javaでクロージャを導入することは、Java 5でのジェネリックよりも大きな変更であるとどこかで読みました。これは本当ですか?長所と短所?
(これまでに、次のJavaリリースにはクロージャが含まれないことが確実にわかっています)
または
編集: http://puredanger.com/ tech / 2009/11/18 / closures-after-all / :D
edit2:JDK7の再考: http://blogs.oracle.com/ mr / entry / rethinking_jdk7
edit3:失う瞬間はありません!: http:/ /blogs.oracle.com/mr/entry/quartet
解決
http://www.javac.info/ をご覧ください。
このように見えるようです:
boolean even = { int x => x % 2 == 0 }.invoke(15);
where {int x => x%2 == 0}
ビットはクロージャです。
他のヒント
実際に導入されるものに依存し、実際に導入されるかどうか です。さまざまなサイズの閉鎖提案がいくつかあります。
提案およびさまざまなブログ投稿については、 Alex MillerのJava 7ページを参照してください。
個人的にはクロージャーが見たい-それらは美しく、信じられないほど役立つ -しかし、私は提案のいくつかがかなり毛深いことを恐れています。
2009年11月、この問題について驚くべきuターンがあり、 Java 7にクロージャーが追加されるようになりました。
更新
Java 7でのクロージャー(別名ラムダ式)は発生しませんでした。これらは、2014年のJava 8の最初のリリースで追加された最終的にです。
残念ながら、Java 7にはクロージャーはありません。Javaにクロージャーを持たせるためのより軽いソリューションを探している場合は、lambdajプロジェクトをチェックアウトしてください。
これは、Java 7の機能です http://tech.puredanger.com/java7/#switch サンプルは非常に便利です。
" function-type"本当に提案されているタイプです:
{int => boolean} evaluateInt; //declare variable of "function" type
evaluateInt = {int x => x % 2 }; //assignment
最終的にどの構文が使用されるかに関しては、まだ多くの議論が行われていると思います。これがすべての理由でJava 7になった場合、実際にはかなり驚くでしょう。
型推論が行われない場合、クロージャは煩わしく冗長になります...:(
クロージャーには深刻なエッジケースがあります。クロージャはジェネリックよりもはるかに重要な変化であり、後者にはまだ多くの毛深いエッジケースがあります。 例えばJavaコレクションライブラリは、警告なしで作成/コンパイルすることはできません。