package com.zhou.java2;
import org.junit.jupiter.api.Test;
import sun.security.util.Length;
import java.util.Arrays;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* 一 构造器引用
* 和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致.
* 抽象方法的返回值即为构造器所属的类的类型
*
* 二 数组引用
*
* @author upzhou
* @create 2022-04-04 15:00
*/
public class ConstructorRefTest {
//构造器引用
//Supplier 中的 T get()
@Test
public void test1(){
Supplier<Employee> sup = new Supplier<Employee>() {
@Override
public Employee get() {
return new Employee();
}
};
System.out.println("*************************");
Supplier<Employee> sup1 = () -> new Employee();
System.out.println(sup1.get());
System.out.println("*************************");
Supplier<Employee> sup2 = Employee::new;
System.out.println(sup2.get());
}
//Function 中的 R apply(T t)
@Test
public void test2(){
Function<Integer, Employee> func1 = id -> new Employee(id);
Employee employee = func1.apply(1001);
System.out.println(employee);
System.out.println("*************************");
Function<Integer, Employee> func2 = Employee::new;
Employee employee1 = func1.apply(1002);
System.out.println(employee1);
}
//BiFunction 中的 R apply(T t, U u)
@Test
public void test3(){
BiFunction<Integer, String, Employee> func1 = (id, name) -> new Employee(id, name);
System.out.println(func1.apply(1001,"Tom"));
System.out.println("*************************");
BiFunction<Integer, String, Employee> func2 = Employee::new;
System.out.println(func1.apply(1002,"Jerry"));
}
//数组引用
//Function 中的 R apply(T t)
@Test
public void test4(){
Function<Integer,String[]> func1 = Length -> new String[Length];
String[] arr1 = func1.apply(5);
System.out.println(Arrays.toString(arr1));
System.out.println("*************************");
Function<Integer,String[]> func2 = String[] ::new;
String[] arr2 = func1.apply(10);
System.out.println(Arrays.toString(arr2));
}
}