标签:name int 构造 Person 引用 数组 public String
类的构造器(构造方法)引用
由于构造器的名称与类名完全一样,并不固定。所以构造器引用使用类名称::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); } }
运行结果:
标签:name,int,构造,Person,引用,数组,public,String 来源: https://www.cnblogs.com/xjw12345/p/16502236.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。