前言:
眼前兄弟们对“java的构造函数有返回值吗”都比较着重,你们都需要知道一些“java的构造函数有返回值吗”的相关资讯。那么小编也在网上收集了一些对于“java的构造函数有返回值吗””的相关资讯,希望姐妹们能喜欢,朋友们一起来了解一下吧!java8 lambda表达式系列历史文章
玩转Java8 lambda表达式&函数式接口一
玩转java8 Lambda表达式
玩转java8 Lambda表达式之静态方法引用
玩转java8 Lambda表达式二之实例方法引用
玩转java8 lambda表达式之三对象方法引用
什么是方法引用?
Lambda还有一个非常重要的功能,就是方法引用。方法引用可以理解为lambda表达式的简便写法。方法引用是用来直接访问类或者实例的已经存在的方法或构造方法(函数),它比lambda表达式更加的简洁,更高的可读性,更好的复用性。
方法引用的语法
类名(或实例)::方法名
方法引用的分类构造方法引用的定义
函数式接口的实现可以通过调用一个类的构造方法来实现,就可以称之为构造方法引用。
构造方法引用的示例
废话少说,直接上干货,代码示例中都有重要注释
无输入参数,无返回值
构造方法引用,调用无参构造方法,由于实例对象无需返回,这个测试实际上没什么意义。
public class LambdaConstructorTest { /** * 无参数,无返回值 */ @Test public void test() { /** * Runnable函数式接口,无参无返回值, * 但是new Student() 仅仅创建一个对象,不作return处理 */ Runnable r1 = () -> new Student(); // r1可以改写为构造方法引用,调用无参构造方法 Runnable r2 = Student::new; r1.run(); r2.run(); }}class Student { private String name; private Integer age; public Student() { System.out.println("student defualt constructor"); } public Student(String name) { System.out.println("student constructor param name:" + name); this.name = name; } public Student(String name, Integer age) { System.out.println("student constructor param name:" + name + ", age:" + age); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
有参数,无返回值
构造方法引用,调用无参构造方法
Supplier<Student> s2 = Student::new;
public class LambdaConstructorTest { /** * 测试无参有返回值场景 */ @Test public void testNoArgReturnValue(){ /** * java.util.function.Supplier java8自带的函数式接口 * 返回一个student类对象 */ Supplier<Student> s1 = ()->new Student(); // 将s1改写为构造方法引用,调用无参构造方法 Supplier<Student> s2 = Student::new; //获取返回对象 s1.get(); s2.get(); }}class Student { private String name; private Integer age; public Student() { System.out.println("student defualt constructor"); } public Student(String name) { System.out.println("student constructor param name:" + name); this.name = name; } public Student(String name, Integer age) { System.out.println("student constructor param name:" + name + ", age:" + age); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
有一个参数,有返回值
构造方法引用,调用带一个参数String name的构造方法
Function<String, Student> f2 = Student::new;
public class LambdaConstructorTest { /** * 测试有一个参数,有返回值 */ @Test public void testArgsReturnValue(){ /** * java.util.function.Function java8自带的函数式接口 * * 返回值调用带有一个参数name的构造方法 */ Function<String, Student> f1 = name->new Student(name); // 将f1改为构造方法引用,调用带一个参数String name的构造方法 Function<String, Student> f2 = Student::new; f1.apply("zhang san"); f2.apply("li si"); }}class Student { private String name; private Integer age; public Student() { System.out.println("student defualt constructor"); } public Student(String name) { System.out.println("student constructor param name:" + name); this.name = name; } public Student(String name, Integer age) { System.out.println("student constructor param name:" + name + ", age:" + age); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
本章节分享了构造方法引用,若是有2个或更多参数的构造方法又如何实现构造方法引用呢?这个作业留给大家练习。
下一章节将为大家分享Stream API流操作,请持续关注。文章中如有错误或不妥之处,欢迎拍砖。