方法引用

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



方法引用的三种语法格式

对象::实例方法名
类::静态方法名
类::实例方法名


  1. Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型一致
  2. 若Lambda参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method


对象::实例方法名

/**
* 对象::实例方法名
*/
@Test
public void test1() {
Consumer<String> con = (x) -> System.out.println(x);

PrintStream ps = System.out;
Consumer<String> con1 = ps::println;

Consumer<String> con2 = System.out::println;
con2.accept("abc");
}

/**
* 对象::实例方法名
*/
@Test
public void test2() {
Emp emp = new Emp();
Supplier<String> sup = () -> emp.getName();
String str = sup.get();
System.out.println(str);

Supplier<Integer> sup1 = emp::getAge;
Integer num = sup1.get();
System.out.println(num);
}


类::静态方法名

/**
* 类::静态方法名
*/
@Test
public void test3() {
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

Comparator<Integer> com1 = Integer::compare;
}


类::实例方法名

/**
* 类::实例方法名
*/
@Test
public void test4() {
BiPredicate<String, String> bp = (x, y) -> x.equals(y);

BiPredicate<String, String> bp1 = String::equals;
}



构造函数引用

ClassName::new


/**
* 构造函数引用
*/
@Test
public void test5() {
Supplier<Emp> sup = () -> new Emp();

Supplier<Emp> sup1 = Emp::new;
Emp emp = sup1.get();
System.out.println(emp);
}


回到顶部