ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用

2022-07-22 09:39:06  阅读:92  来源: 互联网

标签:name int 本类 Person 引用 方法 public String


package com.yang.Test.ThisMethodReference;

/**
 * 通过this引用本类的成员方法
 */
public class Husband {
    //定义一个买房子的方法
    public void buyHouse() {
        System.out.println("北京二环内买一条房子");
    }

    //定义一个结婚的方法,参数传递Richable接口
    public void marry(Richable r){
        r.buy();
    }

    //定义一个非常高兴的方法
    public void soHappy(){
/*        //调用结婚的方法,方法的参数Richable是一个函数式接口,传递Lambda表达式
        marry(() -> {
            //使用this.成员方法调用本类买房子方法
            this.buyHouse();
        });*/

        /**
         * 使用方法引用优化Lambda表达式
         * this是已经存在的
         * 本类的成员方法buyHouse也是已经存在的
         * 所以我们可以直接使用this引用本类的成员方法buyHouse
         */

        marry(this::buyHouse);
    }

    public static void main(String[] args) {
        Husband husband = new Husband();
        husband.soHappy();
    }


}

package com.yang.Test.ThisMethodReference;

/**
 * 定义一个富有的函数式接口
 */
@FunctionalInterface
public interface Richable {
    //定义一个想买什么就买什么的方法
    void buy();
}

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

package com.yang.Test.ConstructorMethodReference;

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


    public static void main(String[] args) {
        //调用printName方法,方法的参数PersonBuilder接口是一个函数式接口可以传递Lambda
        printName("迪丽热巴",name -> new Person(name));
        printName("迪丽热巴",Person::new);
    }
}

package com.yang.Test.ConstructorMethodReference;

/**
 * 定义一个创建Person对象的函数式接口
 */
@FunctionalInterface
public interface PersonBuilder {
    //定义一个方法,根据传递的姓名,创建Person对象返回
    Person builderPerson(String name);
}

package com.yang.Test.ConstructorMethodReference;

public class Person {
    private String name;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }

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

    public Person() {

    }

    public String getName() {
        return name;
    }

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

数组的构造器引用

package com.yang.Test.ArrayMethodReference;

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

    public static void main(String[] args) {
        //调用createArray方法传递数组的长度和Lambda
        int[] array = createArray(length -> {
            //根据数组的长度创建数组并返回
            return new int[length];
        }, 5);

        System.out.println(array.length);
        for (int i : array) {
            System.out.println(i);
        }

        /**
         * 使用方法引用优化Lambda表达好似
         * 已知创建的就是int[]数组
         * 数组的长度也是已知的
         * 就可以使用方法引用
         * int[]引用new,根据参数传递的长度来创建数组
         */

        int[] array1 = createArray(int[]::new, 10);
        System.out.println(array1.length);
    }
}

package com.yang.Test.ArrayMethodReference;

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

标签:name,int,本类,Person,引用,方法,public,String
来源: https://www.cnblogs.com/ailhy/p/16504539.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有