类的构造器和数组构造器的引用
类的构造器(构造方法)引用
由于构造器的名称与类名完全一样,并不固定。所以构造器引用使用类名称::new的格式表示。
public class Person { private String name; @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } public Person() { } public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/* 定义一个创建person对象的函数式接口 */ @FunctionalInterface public interface PersonBuilder { //定义方法,根据传递的姓名创建person对象 Person builderPerson(String name); }
/* 类的构造器(构造方法)引用 */ public class Demo { //定义一个方法,参数传递姓名和PersonBuilder接口,方法中通过姓名创建Person对象 public static void printName(String name,PersonBuilder pb){ Person person = pb.builderPerson(name); System.out.println(person.getName()); } public static void main(String[] args) { //调用printName方法,方法的参数PersonBuilder是一个函数式接口 printName("张三",(String name)->{ return new Person(name); }); /* 使用方法引用优化Lambda表达式 构造方法new Person(String name)已知 创建对象已知 就可以使用Person引用new创建对象 */ printName("李四",Person::new); } }
数组的构造器引用
数组也是Object的子类对象,所以同样具有构造器,只是语法稍有不同
/* 定义一个创建数组的函数式接口 */ public interface ArrayBuilder { //定义一个创建int类型数组的方法,参数传递数组的长度,返回创建好的int类型数组 int[] builderArray(int length); }
/* 数组的构造器引用 */ public class Demo { /* 定义一个方法 方法的参数传递创建数组的长度和ArrayBuilder接口 方法内部根据传递的长度使用ArrayBuilder中的方法创建数组并返回 */ public static int[] creatArray(int length,ArrayBuilder ab){ return ab.builderArray(length); } public static void main(String[] args) { //调用creatArray方法,传递数组的长度和Lambda表达式 int[] arr = creatArray(5,(length)->{ //根据数组的长度创建数组并返回 return new int[5]; }); System.out.println(arr.length); /* 使用方法引用优化Lambda表达式 创建的就是int[]数组 数组的长度也是已知的 就是可以使用方法引用 int[]引用new,根据参数传递的长度来创建数组 */ int[] arr1 = creatArray(10,int[]::new); System.out.println(arr1.length); } }
运行结果:


浙公网安备 33010602011771号