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

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

通过this引用成员方法

this代表当前对象,如果需要引用的方法就是当前类中的成员方法,那么可以使用"this:成员方法"的格式来使用方法引用。首先是简单的函数式接口∶

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

 

package day01.Demo01_Day016.Demo01_JieKou;
    /*
        通过this引用本来的成员方法
     */
public class Husband {
    //定义一个结婚的方法,参数传递Richable接口
    private void marry(Richable lambad){
            lambad.buy();
    }
        //定义一个买房子的方法
    public void beHappy(){
        marry(()->{
            System.out.println("余总买了一个紫禁城");
        });
    }
    //定义一个非常高兴的方法
        public void soHappy(){
        //调用结婚的方法,方法的参数Ricchable是一个函数式接口,传递Lambda表达式
           /*
            marry(()->{
                //使用this,成员方法 ,调用本类买房子的方法
                this.beHappy();
            });
            */
            /*
            使用方法引用优化Lambda表达式
            this是已经存在的
            本类的成员方法buyHouse也是已经存在的
            所以我们可以直接使用this引用本类的成员方法buyHouse
             */
            marry(this::beHappy);
        }

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

 

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

类的构造器引用

由于构造器的名称与类名完全一样,并不固定。所以构造器引用使用类名称::new的格式表示。首先是一个简单的Person类:

package day01.Demo01_Day016.Demo01_JieKou;

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 + '\'' +
                '}';
    }
}

 

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

 

package day01.Demo01_Day016.Demo01_JieKou;
    /*
        方法引用–类的构造器(构造方法)引用
     */
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接口是一个函数式接口,可以传递Lambda
            printName("绛珠仙草",(String name)->{
                return new Person(name);
            });
            /*
            使用方法引用优化Lambda表达式
            构造方法new Person(String name)已知创建对象已知new
            就可以使用Person引用nei创建对象
             */
            printName("凤花仙子",Person::new);//使用Person类的带参构造方法,通过传递的姓名创建对象
        }
}

 

posted @ 2022-10-12 15:48  zj勇敢飞,xx永相随  阅读(37)  评论(0编辑  收藏  举报