多应用+插件架构,代码干净,支持一键云编译,码云点赞13K star,4.8-4.12 预售价格198元 广告
# 方法和构造函数引用 上面的代码实例可以通过静态方法引用,使之更加简洁: ``` Converter<String, Integer> converter = Integer::valueOf; Integer converted = converter.convert("123"); System.out.println(converted); // 123 ``` Java 8 允许你通过::关键字获取方法或者构造函数的的引用。上面的例子就演示了如何引用一个静态方法。而且,我们还可以对一个对象的方法进行引用: ``` class Something { String startsWith(String s) { return String.valueOf(s.charAt(0)); } } Something something = new Something(); Converter<String, String> converter = something::startsWith; String converted = converter.convert("Java"); System.out.println(converted); // "J" ``` 让我们看看如何使用::关键字引用构造函数。首先我们定义一个示例bean,包含不同的构造方法: ``` class Person { String firstName; String lastName; Person() {} Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } } ``` 接下来,我们定义一个person工厂接口,用来创建新的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函数的签名,并选择正确的构造函数形式。