Open codingWang opened 7 years ago
上一节的例子可以使用静态方法引用进一步简化。
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来选择正确的构造器。
Person::new
PersonFactory.create
java 8 Method & Constructor References
上一节的例子可以使用静态方法引用进一步简化。
java8允许你通过
::
传递方法或构造器的引用。上面的例子演示了如何引用静态方法。同时我们也可以引用对象方法让我们看看
::
是如何为构造函数工作的。首先我们定义一个类,他有两个不同的构造函数。接下来我们指定一个功能接口用于创建一个Person
我们通过构造器引用来粘合所有的东西,而不是手动实现接口。
我们通过
Person::new
创建一个Person构造器的引用。java编译器自动通过匹配PersonFactory.create
来选择正确的构造器。