/**
* 方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用"方法引用"
* (可以理解为方法引用是Lambda表达式的另外一种形式)
*
* 主要有三种语法格式:
*
* 对象::实例方法名
*
* 类 :: 静态方法名
*
* 类 :: 实例方法名
*
* 注意:
* ①Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函参数列表和返回值保持一致
* ②若Lambda 参数列表中的第一个参数是 实例方法的调用者,而第二个参数是实例方法的参数时,可以使用 ClassName :: method
*
*
*
* 构造器引用
*
* 格式:
* ClassName :: new
*
* 注意:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致
*
*
*
* 数组引用:
* Type[]::new
*
*/
public class TestMethodRef extends BaseTest {
@Test
public void test1(){
Consumer<String> consumer = x-> System.out.println(x);
/**
* 条件:需要实现的抽象方法-> 参数列表和返回值类型 与 方法引入的参数列表和返回值类型 保持一致
* void accept(T t);
* void println(String x) {
*/
Consumer<String> consumer1 = System.out::println;
}
@Test
public void test2(){
// 对象::实例方法名
Employ employ = new Employ();
Supplier<String> supplier = () -> employ.getName();
Supplier<String> supplier1 = employ::getName;
Supplier<Integer> supplier2 = employ::getAge;
}
@Test
public void test3(){
// 类 :: 静态方法名
Comparator<Integer> comparator = (x,y)-> Integer.compare(x,y);
Comparator<Integer> comparator1 = Integer::compare;
}
@Test
public void test4(){
// 类 :: 实例方法名
BiPredicate<String,String> biPredicate = (x,y)->x.equals(y);
BiPredicate<String,String> biPredicate2 = String::equals;
}
@Test
public void test5(){
// 构造器引用
Supplier<Employ> supplier = ()->new Employ();
Supplier<Employ> supplier1 = Employ::new;
Function<Integer,Employ> function = (x)-> new Employ(x);
Function<Integer,Employ> function1 = Employ::new;
}
@Test
public void test6(){
// 数组引入
Function<Integer,String[]> function = (x)-> new String[x];
Function<Integer,String[]> function1 = String[]::new;
String[] apply = function1.apply(3);
}
}
网友评论