方法引用

方法引用的意思就是若Lambda体中的内容有方法已经实现了,我们可以使用“方法引用”,可以简单理解为是Lambda表达式的另外一种表现形式。

主要有以下三种用法:

对象::实例方法名

定义一个函数式接口:

Java8方法引用和构造器引用_构造器

原来在Lambda表达式中是这么使用的:

Java8方法引用和构造器引用_抽象方法_02

这里有个前提:函数式接口的抽象方法参数列表和返回值要与Lambda体中的方法的参数列表和返回值要一致。

这个方法,在Lambda体中是执行的println方法,实际执行println方法是由System.out返回的对象:

Java8方法引用和构造器引用_抽象方法_03

方法引用:

Java8方法引用和构造器引用_构造器_04

类::静态方法名

Java8方法引用和构造器引用_函数式接口_05

这里有个前提:函数式接口的抽象方法参数列表和返回值要与Lambda体中的静态方法的参数列表和返回值要一致。

Java8方法引用和构造器引用_函数式接口_06

类::实例方法名

函数式接口:

Java8方法引用和构造器引用_构造器_07

Java8方法引用和构造器引用_抽象方法_08

这里有个前提:函数式接口的抽象方法参数列表和返回值要与Lambda体中的方法的参数列表和返回值要一致。而且第一个参数是方法的调用者,第二个参数被调用的方法参数。

Java8方法引用和构造器引用_函数式接口_09

构造器引用

前提:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致

无参构造

函数式接口:

Java8方法引用和构造器引用_抽象方法_10

Java8方法引用和构造器引用_抽象方法_11

有参构造

函数式接口:

Java8方法引用和构造器引用_构造器_12

在User类中增加一个有参构造:

Java8方法引用和构造器引用_构造器_13

Java8方法引用和构造器引用_函数式接口_14

数组引用

格式:类型[]::new;

数组引用跟构造器引用差不多。

Java8方法引用和构造器引用_构造器_15

Java8方法引用和构造器引用_抽象方法_16