JDK8_构造器引用\数组引用

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));
    }
}

 

posted @ 2022-04-30 15:35  UpZhou  阅读(30)  评论(0)    收藏  举报