Fork me on GitHub

java8构造器引用

何为构造器引用

与函数式接口相结合,自动与函数式接口中方法兼容。

格式

ClassName::new

有如下两种使用情况

构造器引用

构造器引用
ClassName::new

/**
 * 构造器引用
 * ClassName::new
 */
@Test
public void test5(){
    Supplier<Employee> sup = () -> new Employee();
    Employee emp = sup.get();
    System.out.println(emp);
    //默认的是类中的无参构造器
    Supplier<Employee> sup1 = Employee::new;
    Employee emp1 = sup1.get();
    System.out.println(emp1);
}
@Test
public void test6(){
    Function<Integer,Employee> fun = (x) -> new Employee(x);
    Employee emp1 = fun.apply(121);
    System.out.println(emp1);

    Function<Integer,Employee> fun2 = Employee::new;
    Employee emp2 = fun.apply(131);
    System.out.println(emp2);

    BiFunction<Integer,Integer,Employee> bifun = Employee::new;
}

数组引用

数组引用
Type[]::new

/**
 * 数组引用
 * Type[]::new
 */
@Test
public void test7(){
    Function<Integer,String[]> fun = (x) -> new String[x];
    String[] app = fun.apply(5);
    System.out.println(app.length);

    Function<Integer,String[]> fun2 = String[]::new;
    String[] app2 = fun2.apply(10);
    System.out.println(app2.length);
}