龙空技术网

玩转java8 lambda表达式之构造方法引用

孤天一鹤 181

前言:

眼前兄弟们对“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流操作,请持续关注。文章中如有错误或不妥之处,欢迎拍砖。

标签: #java的构造函数有返回值吗 #java如何调用带参数的 #java如何调用带参数的函数