龙空技术网

Java8新特性之方法引用(二)构造方法引用

橙子爪哇日记 106

前言:

今天咱们对“java的构造函数有返回值吗对吗”都比较关注,咱们都想要学习一些“java的构造函数有返回值吗对吗”的相关内容。那么小编也在网络上搜集了一些关于“java的构造函数有返回值吗对吗””的相关知识,希望我们能喜欢,姐妹们一起来学习一下吧!

上一篇文章对最常见的方法引用类型做了介绍,这一章继续说一下方法引用中的另一种:构造方法引用。

顾名思义,这是对构造方法的引用,肯定跟构造方法是有关的。屁话不多说,步入正题,上代码。

首先定义一个实体类User:

/** *  User 实体类 * @author orange * @create 2022-01-03 11:58 */@Datapublic class User {    private String name;    private Integer age;    public User() {        System.out.println("====无参构造被执行了======");    }    public User(String name, Integer age) {        this.name = name;        this.age = age;        System.out.println("====有参构造被执行了======");    }}
无参构造方法引用,使用函数式接口java.util.function.Supplier进行举例:
 /**  * java.util.function.Supplier<T>   * 函数式接口,  * get方法不接收参数,返回一个T类型的对象  */Supplier<User> supplier1 = new Supplier<User>() {  @Override  public User get() {    return new User();  }};System.out.println("/匿名内部类/supplier1.get()////" + supplier1.get());Supplier<User> supplier2 = User::new;System.out.println("/构造方法引用/supplier2.get()////" + supplier2.get());

结果打印:

====无参构造被执行了======/匿名内部类/supplier1.get()////User(name=null, age=null)====无参构造被执行了======/构造方法引用/supplier2.get()////User(name=null, age=null)
有参构造方法引用,使用函数式接口java.util.function.BiFunction进行举例:
/** * java.util.function.BiFunction<T, U, R>  * 函数式接口 * apply方法接收2个参数 * 第一个参数为T类型,第二个参数为U类型;  * 返回一个R类型的对象 */BiFunction<String, Integer, User> biFunction1 = new BiFunction<String, Integer, User>() {  @Override  public User apply(String s, Integer integer) {    return new User(s, integer);  }};System.out.println("==匿名内部类==biFunction1.apply====" + biFunction1.apply("zhangsan", 23));BiFunction<String, Integer, User> biFunction2 = User::new;System.out.println("==构造方法引用==biFunction2.apply====" + biFunction2.apply("lisi", 24));

结果打印:

====有参构造被执行了========匿名内部类==biFunction1.apply====User(name=zhangsan, age=23)====有参构造被执行了========构造方法引用==biFunction2.apply====User(name=lisi, age=24)

上述代码使用了2个函数式接口对构造方法引用进行了示范,先使用了大家最容易理解的匿名内部类,然后又使用构造方法引用对其进行简化;但两者其实本质完全相同。

构造方法引用格式:

类名 :: new
使用要求:

1.首先需要可以使用lambda表达式表达;

2.其次lambda的方法体写的方法已经存在,且是某个类的构造方法(有参无参均可)

3.此外还要满足实现函数式接口的方法参数、返回值类型必须和某个类的有参构造方法或无参构造方法参数、返回值要一致;

如:

上述Supplier接口里面get()的入参是空,出参是User类型,和User的无参构造方法出入参相同,方法体里面也是User类的无参构造方法,符合条件;

BiFunction的apply方法出入参和User类的有参构造出入参一致,方法体里面也是User类的有参构造方法,符合条件。

好啦,java8 新特性之方法引用--构造方法引用先讲到这里。有疑问可以评论区讨论,作者看到都会回复哒![害羞]求关注收藏转发评论![送心][呲牙][呲牙][呲牙]

标签: #java的构造函数有返回值吗对吗