# 方法和構造函數引用
上面的代碼實例可以通過靜態方法引用,使之更加簡潔:
```
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函數的簽名,并選擇正確的構造函數形式。