2012-02-13 7 views
5

既存の内部クラスの何が問題なのですか?なぜ内部クラスをクロージャの表現に使用できないのですか?JDK 1.8へのクロージャの導入 - プロジェクトラムダ

現在、私はここにいくつかのリソースを投稿し、で開始します。

まず、以下は、クロージャが何であるかの概要を示しています。それは言語にとらわれない。私ははラムダの少し後

[2007年1月]クロージャhttp://gafter.blogspot.com/2007/01/definition-of-closures.htmlの定義

END

[2011年12月]の状態を追加し、それを 閉鎖を読むためにhttp://martinfowler.com/bliki/Closure.html

をお勧めしますhttp://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

[2007年10月]プログラミング言語における高度なトピック:

[2011年1月4日] JSR 292良Javaのhttp://www.youtube.com/watch?v=0zVizaCOhME用クロージャ:invokedynamicのhttp://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic

+0

このような一般的な質問をしたり、一般的な情報を投稿する場所ではありません。 SOには非常に具体的なガイドラインがあり、あなたの投稿はそれらのいくつかに違反しています。 [faq]と[ask]をお読みください。 –

+0

http://stackoverflow.com/questions/36636/what-is-a-closureをご覧ください。これはもっと一般的な質問です。 – alexsmail

+1

@ジムガリソン、私は質問の範囲を減らします。今は大丈夫だと思う。 – alexsmail

答えて

0

内部クラスを使用してラムダSAM型への変換は、クロージャを行うことができ、物事の多くを行うために使用することができますあなたのために。

クローズには2つの大きな利点があります。これらは、よりシンプルで簡潔な意味で使用される可能性が高くなります。言語によって理解されやすく、内部クラスが最適化されないように最適化することができます。例えば特定の例外の処理の改善、プリミティブの処理。

クロージャを使用して、他のファーストクラスのメソッドを構築することができます。カレーリングによって。これは多くの利点があるかどうかはわかりませんが、ネストされたクラスでは簡単なオプションではありません。

+0

私はそれらが内部クラスのまわりの文法的な砂糖であると思っていました(よくタイプシステムに若干の修正が加えられました)。 – Voo

+0

上記のhttp://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamicのリンクを参照してください。Javaにおけるクロージャの現在の提案_implementation_は、内部クラスを使用することであり、MethodHandleは使用しません。 – alexsmail

+0

@Vooあなたがフォーラムを読むのを始めたら、あなたと私がそれを見るのと同じように、文法的な砂糖ではなく、言語の変化が_fundemantal_であると言った多くの人々がいることがわかります。たとえば、上記のhttp://www.youtube.com/watch?v=0zVizaCOhMEリンクをご覧ください。 – alexsmail

3

私はそれを理解してきたように、Javaの8で閉鎖のための計画はちょうど内部クラスと現在の回避策よりも痛みのそれは少ないようにすることです - 真剣に、内部クラスの構文は、巨大な構文上のオーバーヘッドであるため、簡単なラムダを書く。

+0

したがって、「構文的砂糖」だけですか? :-) – alexsmail

+0

私はそうだと思いました。それは...ですか? –

+1

それは私が思ったもの。私は 'MethodHandle'を見つけるまで。そして、閉鎖のバックとフォースの実装を切り替えます。今、私は混乱しています。 – alexsmail

関連する問題