方法引用“::”

“::”,c#里面没有这个符号,比较像事件、委托。不过比委托难理解点

方法引用分4种:

1.静态方法引用。

2.实例方法引用。

3.实例方法引用,第一个参数为实例对象,写法和静态方法引用一样。

4.构造方法的引用。

 

方法引用,其实就是lambda简写,lambda可以认为是匿名内部类的简写。

重点是要能根据参数推导出来。

 

 

主方法:

/*
* 引用:
* 所有引用都是lambda表达式的替换写法,都可以用lambda来写
* */
public class Lambda1 {
    public static void main(String[] args) {
        userEnable(s -> Integer.parseInt(s));

        //应用类方法 静态方法
        userEnable(Integer::parseInt);

        //类实例方法
        Person p = new Person();
        userEnable(s -> p.eat(s));
        userEnable(p::eat);

        //类的实例方法:第一参数为类的实例
        useStringEnable((s,x,y)->s.substring(x,y));
        useStringEnable(String::substring);

        //引用构造器
        userPerosnBuilder((String x,int y)->{return new Person(x,y);});
        userPerosnBuilder((x,y)->new Person(x,y));
        userPerosnBuilder(Person::new);
    }

    public static void userEnable(Enable e) {
        int num = e.eat("12");
        System.out.println(num);
    }

    public static void useStringEnable(StringEnable se) {
        String s = se.subString("abcd", 2, 3);
        System.out.println(s);
    }

    public static void userPerosnBuilder(PersonBuilder pb){
        Person p = pb.builder("张三",23);
        System.out.println(p.toString());
    }
}

三个接口:

public interface Enable {
    int eat(String s);
}
public interface PersonBuilder {
    Person builder(String name,int age);
}
public interface StringEnable {
    String subString(String s,int a,int b);
}

 

一对象:

public class Person {
    public int eat(String s){
        return Integer.parseInt(s+s);
    }

    public Person() {
    }

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

    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

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

 

posted @ 2020-10-17 13:23  zhuyapeng  阅读(833)  评论(0编辑  收藏  举报