codingWang / Issue

private space .Do NOT look at it.
3 stars 0 forks source link

basic-java8-04-method&constructor references #7

Open codingWang opened 7 years ago

codingWang commented 7 years ago

java 8 Method & Constructor References

上一节的例子可以使用静态方法引用进一步简化。

    Converter<String, Integer> converter = Integer::valueOf;
    Integer converted = converter.convert("123");
    System.out.println(converted);   // 123

java8允许你通过::传递方法或构造器的引用。上面的例子演示了如何引用静态方法。同时我们也可以引用对象方法

    class Something{
        Stirng startWith(String args){
            return String.valueOf(args.charAt(0));
        }
    }
    //****************************************
    Something something = new Something();
    Converter<String,String> converter = something::startWith;
    String converted = converter.convert(java);
    System.out.println(converted);    // "J"

让我们看看::是如何为构造函数工作的。首先我们定义一个类,他有两个不同的构造函数。

    class Person{
        String firstName;
        String lastName;

        Person(){}

        Persion(String firstName,String lastName){
            this.firstName = firstName;
            this.lastName = lastName;
        }
    }

接下来我们指定一个功能接口用于创建一个Person

    interface PersonFactory<P extends Person>{
        P create(String firstName,String lastName);
    }

我们通过构造器引用来粘合所有的东西,而不是手动实现接口。

    PersonFactory<Person> personFactory = Person::new;
    Person person = personFactory.create("Peter","Parker");

我们通过Person::new创建一个Person构造器的引用。java编译器自动通过匹配PersonFactory.create来选择正确的构造器。