方法引用(Method References)
- 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
- 方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就
是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向
一个方法,可以认为是Lambda表达式的一个语法糖。,也可以理解为方法应用是Lambda 表达式的另一种 表现形式 - 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的
方法的参数列表和返回值类型保持一致!
语法格式:
- 对象::实例方法名
- 类:: 静态方法
- 类:: 实例方法名
注意:
- ①Lambda 体中调用方法的参数列表与返回值类型 , 要与函数式接口中的抽象方法的函数列表和返回值类型一致
- ②如果 Lambda 有两个参数 第一个参数是实例方法 的 调用者 第二个参数 是实例方法的参数 时 可以使用 类::方法名
例:
Consumer<String> consumer = (s) -> System.out.println(s);
PrintStream ps = System.out;
// 方法引用 参数类型 与 返回值 类型一致
Consumer<String> con1 = ps::println;
con1.accept("adfdfdf");
//静态方法引用
Comparator<Integer> com2 = Integer::compareTo;
构造器引用
- 格式:
className::new - 注意: 需要调用的构造器 的参数列表 与 函数式 接口 中的抽象方法 的参数列表需要 保持 一致
Supplier<Employee> supplier = ()->new Employee();
Supplier<Employee> supplier1 = Employee::new;
数组引用
Function<Integer,String[]> function = (x)-> new String[x];
Function<Integer,String[]> function2 = String[]::new;
两者等价