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

类的构造器

由于构造器的名称与类名完全一样,并不固定,所以构造器引用使用;类名称::的格式表示

/*
定义一个创建Person对象的函数式接口
 */
@FunctionalInterface
public interface PersonBuilder {
    person builderPerson(String name);
}



public class person {
    private String name;

    public person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}



/*
类的构造器(构造方法)引用
 */
public class demo {
    //定义一个方法,参数传递姓名和personBuilder接口,方法中通过姓名创建Person对象
    public static void printName(String name,PersonBuilder p){
        person person = p.builderPerson(name);
        System.out.println(person.getName());
   }

    public static void main(String[] args) {
        //调用printName方法,方法的参数personBuilder接口是一个函数式接口,可以传递Lambda
    printName("杰瑞",(String name)->{
        return new person(name);
    });
    /*
    使用方法引用优化Lambda表达式
    构造方法new Person( String name)已知创建对象已知new
    就可以使用Person引用nev创建对象
     */
        printName("汤姆",person::new);//使用Person类的带参数构造方法,通过传递姓名创建对象
    }
}

数组的构造器引用

数组也是Object的子类对象,所以同样具有构造器,只是语法稍微不同,如果对应到Lambda使用场景中需要一个函数式接口

/*
定义一个创建数组的函数式接口
 */
@FunctionalInterface
public interface ArrayBuilder {
    //定义一个创建int类型数组的方法,参数传递数组的长度,返回创建好的int类型数组
    int [] builderArray(int length);
}



/*
数组的构造器应用
 */
public class demo {
    /*
    定义一个方法
    方法的参数传递数组的长度和ArrayBuilder接口
     方法内部根据传递的长度使用ArrayBuilder中的方法创建数组并返回
     */
    public static  int[] createArray(int length,ArrayBuilder ab){
        return ab.builderArray(length);
    }

    public static void main(String[] args) {
        //调用createArray方法,传递数组的长度和Lambd表达式
         int[] arr1 = createArray(10,(len) -> {
           return new int[len];
        });
        System.out.println(arr1.length);
        /*
        使用方法引用优化Lambda表达式
        已知创建的就是int[]数组
        数组的长度也是已知的
        就可以使用方法引用
        int[]引用new 根基参数参数传递的长度来创建数组
         */
        int[] arr2 = createArray(10, int[]::new);
        System.out.println(Arrays.toString(arr2));
        System.out.println(arr2.length);
    }
}

 

posted @ 2022-09-23 10:40  ja不会va  阅读(21)  评论(0编辑  收藏  举报