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

方法引用_通过this引用本类的成员方法

this代表当前对象,如果需要引用的方法就是当前类中的成员方法,那么可以使用“this : : 成员方法”的格式来使用方法引用

/*
定义一个富有的函数式接口
 */
@FunctionalInterface
public interface Richable {
    //定义一个想买什么就买什么的的方法
    void buy();
}
/*
    通过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) {
        new Husband().soHappy();
    }

}

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

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

public class Person {
    private String name;

    public Person() {
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}
/*
    定义一个创建Person对象的函数式接口
 */
@FunctionalInterface
public interface PersonBuilder {
    //定义一个方法,根据传递的姓名,创建Person对象返回
    Person builderPerson(String name);
}
/*
类的构造器(构造方法)引用
 */
public class PersonBuilderTest {

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

    //定义一个方法,参数传递姓名和PersonBuilder接口,方法中通过姓名创建Person对象
    public static void printName(String name,PersonBuilder pb){
        Person person = pb.builderPerson(name);
        System.out.println(person.getName());
    }
}

 

posted @ 2022-07-21 14:12  魔光领域  阅读(65)  评论(0编辑  收藏  举报