メソッドリファレンスは説明します
2つのPersonインスタンスの生年月日を比較するこのメソッドは、すでにとして存在しPerson.compareByAge
ます。代わりに、ラムダ式の本体でこのメソッドを呼び出すことができます。
Arrays.sort(rosterAsArray,
(a, b) -> Person.compareByAge(a, b)
);
このラムダ式は既存のメソッドを呼び出すため、ラムダ式の代わりに>メソッド参照を使用できます。
Arrays.sort(rosterAsArray, Person::compareByAge);
次に、さまざまな種類のメソッド参照について説明します。
メソッド参照には次の4種類があります。
Reference to a static method ContainingClass::staticMethodName
Reference to an instance method
of a particular object containingObject::instanceMethodName
Reference to an instance method ContainingType::methodName
of an arbitrary object of a
particular type
Reference to a constructor ClassName::new
ヒストリカルノート(Java 8が完成する前に書かれました)
Javaクロージャの提案はこんな感じだと思います。 スティーブンコレボーンは言う:
Stefanと私は、First-class Methods:Javaスタイルのクロージャ提案のv0.4のリリースを発表できることを嬉しく思います。
変更点
v0.3以降、さまざまなフォーラムで受け取ったフィードバックの一部を取り入れようとしています。主な変更点は次のとおりです。
1)コンストラクターとフィールドのリテラル。FCM構文java.lang.reflect.Constructor
を使用して、タイプセーフでコンパイル時に変更されたインスタンスを作成できるようになりました。Field
// method literal:
Method m = Integer#valueOf(int);
// constructor literal:
Constructor<Integer> c = Integer#(int);
// field literal:
Field f = Integer#MAX_VALUE;
しかし、この構文は出荷用のJVMでは使用できないと思います。クロージャ自体は間違いなくJava7にはありません。Java8で表示される場合があります。
Javaクロージャサイトには、構文があまり変更されていないように見えますが、もう少し最新の「メソッド参照」へのポインタがあります。