Lambda表达式基础(10)- 什么是方法引用?

任何lambda表达式可以被看作是一个函数式接口的功能描述的匿名表示。代表一个函数描述符的另一种方法是使用现有类的具体方法。方法引用就是这些现有方法的句柄。例如:
String::valueOf
Integer::compare
是静态方法的引用,类似于没有捕获任何实例或局部变量的lambda表达式。(实例方法引用在下一节阐述)举一个简单的例子,在类java.util.Arrays中的方法
public static <T> void sort(T[] a, Comparator<? super T> c);
第二个参数要求一个Comparator接口。该方法Integer.compare有一个签名类型兼容于Comparator函数描述,也就是说,所以像这样调用Arrays.sort它的比较方法是合法的:
Arrays.sort(myIntegerArray, Integer::compare)
在这个简单的例子中,引用的方法签名Integer::compare,正好(通过类型擦除)与Comparator的函数描述符相匹配。一般情况下,精确匹配是没有必要的:在这样的调用下,方法引用可以被看作是由一个lambda表达式的简写,从函数描述符和调用引用的方法体复制的一个形式参数列表。

请注意,该语法引用类型::标识符用来引用静态方法,如上面的例子也可以用来引用实例方法。

原文链接:http://www.lambdafaq.org/what-are-method-references/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值