Method References are compact, easy-to-read lambda
expressions for methods that already have a name.
Method References是轻便易读的代表已经存在的方法的lambda
表达式。
在java8种我们利用lambda式去生成一个类似匿名内部类的
instance,而lambda式实际上就是一个方法的定义。这时候,如果我们不是在lambda式里面自己写方法的定义,而是引用一个已经存在的方法的时候,就可以用java8的新特性之一,Method References(方法参照?)。
比如下面这段使用Method References以前的代码(来自oracle
官方文档):
这是一段通过生日比较两个人年龄大小来排序的代码。
class="java" name="code">
Arrays.sort(rosterAsArray,
(Person a, Person b) -> {
return a.getBirthday().compareTo(b.getBirthday());
}
);
如果Person这个类中已经有了一个方法来比较两个人的年龄大小的话,可以写成下面这样:
Arrays.sort(rosterAsArray,
(a, b) -> Person.compareByAge(a, b)
);
更进一步:
Arrays.sort(rosterAsArray, Person::compareByAge);
---------------------------------------------------------------------------------
Method References的种类:
1.Reference to a static method -
静态方法引用
2.Reference to an instance method of a particular object - 特定对象实例方法引用
3.Reference to an instance method of an arbitrary object of a particular type - 特定TYPE 任意对象实例引用
4.Reference to a constructor - 构造方法引用
据Oracle文档说,JRE将会自动推断方法的参数列表。
(原文:The JRE infers the method type arguments)