类的构造器和数组构造器的引用

类的构造器(构造方法)引用

由于构造器的名称与类名完全一样,并不固定。所以构造器引用使用类名称::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);
    }
}
复制代码

运行结果:

 

posted @   xjw12345  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示