java中的方法引用(method reference)- 官方文檔總結


2017/7/5

轉載寫明出處:http://www.cnblogs.com/daren-lin/p/java-method-reference.html

今天要說的是java中的一項新特性,方法引用,method reference。方法引用完全可以用lambda來代替,不會根本不影響平時的開發,但是如果學會了方法引用的話,可以裝逼!

本文按照官方文檔的例子來解釋。

 

方法引用(method reference)

方法引用只是lambda表達式的拓展,如果不了解lambda表達式,請先閱讀本文:java語言中的匿名類與lambda表達式介紹與總結

有時候lambda表達式只是調用了一個已經申明過的方法,為了增加可讀性(zhuang bi)和進一步簡化,可以使用方法引用。

下面的例子可以很好說明方法引用的使用情形

例子:如果想要按照年齡(age)來給人(Person)排序

有一個Person的數組 rosterAsArray。首先我們實現一個 Comparator,然后使用Arrays.sort來排序

1 Person[] rosterAsArray = roster.toArray(new Person[roster.size()]);
2 
3 class PersonAgeComparator implements Comparator<Person> {
4     public int compare(Person a, Person b) {
5         return a.getBirthday().compareTo(b.getBirthday());
6     }
7 }
8         
9 Arrays.sort(rosterAsArray, new PersonAgeComparator());

這里我們看到Comparator實際上是個函數接口(functional interface),所以直接用lambda來簡化

1 Arrays.sort(rosterAsArray,
2     (Person a, Person b) -> {
3         return a.getBirthday().compareTo(b.getBirthday());
4     }
5 );

假設Person中已經存在一個static的方法 Person.compareByAge 來比較兩個人的年齡,那么我們可以寫成如下

1 Arrays.sort(rosterAsArray,
2     (a, b) -> Person.compareByAge(a, b)
3 );

這個時候我們發現,實際上這個lambda只是調用了已經存在的一個函數compareByAge,那么我們就可以用方法引用了,我們可以寫成更簡單的形式:

1 Arrays.sort(rosterAsArray, Person::compareByAge);

一行搞定!

 

4種不同類型的方法引用

很直接,我就不做說明直接上表格了

類型 例子
static方法的引用 ContainingClass::staticMethodName
特定對象的方法的引用 containingObject::instanceMethodName
特定類型的方法的引用 ContainingType::methodName
構造器的引用 ClassName::new

 

參考

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM