web-dev-qa-db-ja.com

Java 7のクロージャ

クロージャは、来年の夏頃にリリースされる予定の次のJava標準で導入される可能性があると聞いています。

この構文はどのようになりますか?

Javaにクロージャを導入することは、一般的なものよりも大きな変更であるJava 5.これは本当ですか?賛否両論ですか?

(今では、クロージャが次のJavaリリース)に含まれないことは間違いなくわかっています)

OR

編集: 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

29
Schildmeijer

http://www.javac.info/ をご覧ください。

これはどのように見えるかと思われます:

boolean even = { int x => x % 2 == 0 }.invoke(15);

どこ { int x => x % 2 == 0 }ビットはクロージャーです。

17
Steven Huwig

それは実際に何が導入されるかに依存し、実際にそれが導入されるかどうか。さまざまなサイズの閉鎖提案がいくつかあります。

提案とさまざまなブログ投稿については、 AlexMillerのJava 7ページ を参照してください。

個人的に私はクロージャを見たいです-それらは 美しくそして信じられないほど役に立ちます -しかし私はいくつかの提案がかなり毛深いのではないかと心配しています。

13
Jon Skeet

2009年11月、この問題に驚くべきUターンがあり、 クロージャが追加されます からJava 7。

更新

Java 7のクロージャ(別名ラムダ式)は発生しませんでした。それらはfinallyの最初のリリースで追加されました。 Java 2014年は8。

11
Dónal

残念ながら、Java 7でクロージャを見つけることはできません。Javaでクロージャを使用するためのより軽いソリューションを探している場合は、今すぐlambdajプロジェクトをチェックしてください。

http://code.google.com/p/lambdaj/

4
Mario Fusco

「関数型」は実際には提案の下の型であることに注意してください。

{int => boolean} evaluateInt;    //declare variable of "function" type
evaluateInt = {int x => x % 2 }; //assignment
3
oxbow_lakes

これはJava 7つの機能 http://tech.puredanger.com/Java7/#switch 例は非常に便利です。

3
Agusti-N

型推論がない場合、クロージャは煩わしく冗長になります... :(

2

最終的にどの構文が使用されるかについては、まだ多くの議論が行われていると思います。これがすべての理由でJava 7になるとしたら、私は実際にはかなり驚いています。

2
jsight

クロージャにはいくつかの深刻なエッジケースがあります。クロージャはジェネリックよりもはるかに重要な変更であり、後者にはまだ多くの毛深いエッジケースがあります。例えばJavaコレクションライブラリは、警告なしに書き込み/コンパイルすることはできません。

1
Peter Lawrey