import org.junit.Test;
import java.util.Arrays;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* 一、构造器引用
* 和方法引用类似,函数式接口的抽象方法的形参列表和构造器的一致
* 抽象方法的返回值类型即为构造器所属的类的类型
* 二、数组引用
*/
public class ConstructorRefTest {
/**
* 构造器引用
* Supplier中的T get()
*/
@Test
public void test1() {
Supplier<Employee> supplier = new Supplier<Employee>() {
@Override
public Employee get() {
return new Employee();
}
};
System.out.println("************************");
Supplier<Employee> supplier1 = () -> new Employee();
System.out.println(supplier1.get());
System.out.println("************************");
Supplier<Employee> supplier2 = Employee::new;
System.out.println("supplier2 = " + supplier2.get());
}
/**
* Function中的R apply(T t)
*/
@Test
public void test2() {
Function<Integer, Employee> function1 = id -> new Employee(id);
Employee employee = function1.apply(1001);
System.out.println("employee = " + employee);
Function<Integer, Employee> function2 = Employee::new;
System.out.println("function2 = " + function2.apply(1002));
}
/**
* BiFunction中的R apply(T t,U u)
*/
@Test
public void test3() {
BiFunction<Integer, String, Employee> function1 = (id, name) -> new Employee(id, name);
Employee employee = function1.apply(1001, "Tom");
System.out.println("employee = " + employee);
BiFunction<Integer, String, Employee> function2 = Employee::new;
System.out.println("function2 = " + function2.apply(1002, "Tom"));
}
/**
* 数组引用
* Function中的R apply(T t)
*/
@Test
public void test4() {
Function<Integer, String[]> function1 = length -> new String[length];
String[] strings = function1.apply(5);
System.out.println("strings = " + Arrays.toString(strings));
System.out.println("****************************");
Function<Integer, String[]> function2 = String[]::new;
String[] string2 = function2.apply(10);
System.out.println("strings2 = " + Arrays.toString(string2));
}
}
Employee.java
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* Created by cute coder
* 2021/9/10 20:56
*/
@Getter
@Setter
@NoArgsConstructor
@Builder
@ToString
@EqualsAndHashCode
public class Employee {
private int id;
private String name;
private int age;
private double salary;
public Employee(int id) {
this.id = id;
System.out.println("Employee(int id) ");
}
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
public Employee(int id, String name, int age, double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
}