java方法引用替代lambda表达式

来源:互联网 发布:22lr子弹数据 编辑:程序博客网 时间:2024/04/28 03:46
/* * 方法引用: * 当Lambda表达式中仅仅调用一个已经存在的方法时, * 我们就可以使用方法引用代替Lambda表达式。这样 * 可以让程序进一步简洁。 *  * 方法引用分为以下四种: * 1 引用静态方法 * 2 通过对象(引用)引用实例方法 * 3 通过类型引用实例方法 * 4 引用构造器 */    public class MethodReference {    public static void main(String[] args) {        Person person1 = new Person("人1", 20, 150, 160);        Person person2 = new Person("人2", 30, 150, 120);        Friend f = (p1, p2) -> Person.makeFriend(p1, p2);        // f.makeFriend(person1, person2);        // 引用静态方法,抽象方法的每个参数会依次传递给        // 所引用的静态方法。        f = Person::makeFriend;        Tools tool = new Tools();        f = (p1, p2) -> tool.makeFriend(p1, p2);        // 通过对象引用实例方法        // 抽象方法的每个参数会依次传递给所引用的实例方法。        f = tool::makeFriend;        f = (p1, p2) -> p1.makeFriend2(p2);        // 通过类型引用实例方法        // 抽象方法第一个参数用来从当所引用实例方法的调用对象。        // 抽象方法的第二个参数起,会依次传递给所引用的实例方法。        f = Person::makeFriend2;        Create c = (name, age, height, weight) -> new Person(name, age, height, weight);        // 引用构造器        //抽象方法的每个参数会依次传递给所引用构造器的参数        c = Person::new;    }}@FunctionalInterfaceinterface Friend {    // 两个人交朋友    void makeFriend(Person p1, Person p2);}@FunctionalInterfaceinterface Create {    Person build(String name, int age, int height, int weight);}    class Person {    private String name;    private int age;    private int height;    private int weight;    public Person(String name, int age, int height, int weight) {        super();        this.name = name;        this.age = age;        this.height = height;        this.weight = weight;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public int getHeight() {        return height;    }    public void setHeight(int height) {        this.height = height;    }    public int getWeight() {        return weight;    }    public void setWeight(int weight) {        this.weight = weight;    }    public void makeFriend2(Person p) {        //使用当前对象this与参数p交朋友    }    public static void makeFriend(Person p1, Person p2) {        //两个人交朋友的细节        System.out.println("两个人交朋友的细节");    }}    class Tools {        public void makeFriend(Person p1, Person p2) {            System.out.println("两个人交朋友的细节");        }    }
0 0