方法参考说明
这种比较两个 Person 实例的出生日期的方法已经存在于Person.compareByAge
. 您可以在 lambda 表达式的主体中调用此方法:
Arrays.sort(rosterAsArray,
(a, b) -> Person.compareByAge(a, b)
);
因为这个 lambda 表达式调用了一个现有的方法,所以您可以使用 > 方法引用而不是 lambda 表达式:
Arrays.sort(rosterAsArray, Person::compareByAge);
并继续解释各种方法引用:
有四种方法引用:
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 和我很高兴地宣布发布第一类方法 v0.4:Java 风格的闭包提案。
变化
从 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 中都不可用。闭包本身绝对不在 Java 7 中。您可能会在 Java 8 中看到它。
Java 闭包站点有一个指向“方法引用”的指针,虽然看起来它们并没有对语法进行太多更改,但它有点更新。