Java方法引用与构造引用
一、方法引用
(一)使用情景
当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
(二)情况
- 对象 :: 非静态方法
- 类 :: 静态方法
- 类 :: 非静态方法
(三)要求
接口中的抽象方法的(形参列表和返回值类型)与方法引用的方法的(形参列表和返回值类型)相同。
(四)演示
/**
* 对象::非静态方法
*/
@Test
public void test1() {
Consumer<String> con1 = str -> System.out.println(str);
con1.accept("北京");
//方法引用:本质上是Lambda表达式,而Lambda表达式作为函数式接口的实例,
// 所以方法引用,也就是函数式接口的实例。
PrintStream out = System.out;
Consumer<String> con2 = out::println;
con2.accept("南京");
}
/**
* 类::静态方法
*/
@Test
public void test2() {
Comparator<Integer> com1 = (t1, t2) -> Integer.compare(t1, t2);
//方法引用,内部是compare(第一个元素,第二个参数)
Comparator<Integer> com2 = Integer::compare;
}
/**
* 类::实例方法
*/
@Test
public void test3() {
Comparator<Integer> com1 = (t1, t2) -> t1.compareTo(t2);
//引用方法,默认第一个元素.compareTo(第二个元素)
Comparator<Integer> com2 = Integer::compareTo;
}
二、构造器引用
(一)无参
(二)带参
会找对应参数类型与对应参数个数的构造器。