构造器引用基于lambda表达式,函数式接口,和方法引用,不了解的小伙伴可以先去看看 开始进入正文。。。。。 先看下面的实体类
public class User { private int age; private String name; private int salary; public User() { System.out.println("User()....."); } public User(int age) { this.age = age; System.out.println(age); } public User(int age, String name) { this.age = age; this.name = name; System.out.println(age+name); } }平时我们创建对象使用关键字 new 从jdk8开始,我们可以用以下方式创建对象
//一般情况下,我们是这样的 User user = new User(); //使用lambda表达式 Supplier<User> supplier = ()->new User(); System.out.println(supplier.get()); //使用构造器引用,一般情况下,我们new User()创一个实例,所以用new代表返回一个对象 Supplier<User> supplier1 = User::new; System.out.println(supplier1.get());上面是空参构造器,那么有参构造器怎么办呢,别急,请继续往下看
//传递一个参数 //一般情况下,我们是这样的 User user = new User(2); //使用lambda表达式 Function<Integer, User> userFunction = t->new User(t); System.out.println(userFunction.apply(1)); //使用构造器引用,为什么用Function呢?我们知道Function的核心就是传递一个类型的参数,返回另外一个类型。下面传递Integer类型参数,返回User类型 Function<Integer, User> userFunction1 = User::new; userFunction1.apply(2);双参数构造同理
BiFunction<Integer,String,User> biFunction = User::new; System.out.println(biFunction.apply(4, "ljk")); //数组引用 Function<Integer, String[]> integerFunction = t->new String[t]; String[] strings = integerFunction.apply(5); System.out.println(Arrays.toString(strings)); Function<Integer, String[]> integerFunction2 = String[] :: new; String[] strings2 = integerFunction2.apply(5); System.out.println(Arrays.toString(strings2));注意: 如果哪里有说的不对的地方,希望各位小伙伴不吝赐教
