概述
很多java 方法 会使用函数式接口作为参数。例如,java.util.Arrays类中的一个sort方法,就接受一个Comparator接口,它就是一个函数式接口,sort方法的签名如下:
public static T[] sort(T[] array, Comparator<? super T>
comparator
)
相对于传递一个Compartor的实例给sort方法,不如传递一个Lambda表达式。
进一步,我们可以传递一个方法引用来代替Lambda表达式,一个简单的方法引用就是一个类名或是实例名后面紧跟着::符号,最后面是方法名。
为什么想用方法引用?主要有两个原因:
1.方法引用比Lambda表达式有更短的语义,因为方法引用不像Lambda表达式那样包含定义,方法引用的主体已经在别的地方定义了。
2.实现代码复用。
你可以使用引用给静态方法,实例方法甚至构造方法,在java8 中使用心得标识符“::”,使类名/实例引用和方法名/构造方法名分开,类封装了引用实例但并没有函数式接口的实现。
方法引用的语法有下面几种定义:
ClassName
::
staticMethodName
ContainingType
::
instanceMethod
objectReference
::
methodName
ClassName
::new
时间: 2024-10-11 02:59:10