JDK8之构造器引用
构造器引用基于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));
注意: 如果哪里有说的不对的地方,希望各位小伙伴不吝赐教