Java 8 方法引用
阿新 • • 發佈:2018-12-02
bar ria john 點擊 targe ati void linda icu
下面,我們定義了 4 個方法作為例子來區分 Java 中 4 種不同方法的引用。
Java 8 方法引用
There are four kinds of method references:
Kind | Example |
---|---|
Reference to a static method | ContainingClass::staticMethodName |
Reference to an instance method of a particular object | containingObject::instanceMethodName |
Reference to an instance method of an arbitrary object of a particular type | ContainingType::methodName |
Reference to a constructor | ClassName::new |
方法引用通過方法的名字來指向一個方法。
方法引用可以使語言的構造更緊湊簡潔,減少冗余代碼。
方法引用使用一對冒號 :: 。
import java.time.LocalDate; import java.util.Arrays; import java.util.List; public class ComparisonProvider { public int compareByName(Person a, Person b) { return a.getName().compareTo(b.getName()); } public static int compareByAge(Person a, Person b) { return a.getBirthday().compareTo(b.getBirthday()); } public static void main(String[] args) { List<Person> roster = Person.createRoster(); Person[] rosterAsArray = roster.toArray(new Person[roster.size()]); // 特定對象的實例方法引用: containingObject::instanceMethodName ComparisonProvider myComparisonProvider = new ComparisonProvider(); System.out.println("排序前:" + Arrays.toString(rosterAsArray)); Arrays.sort(rosterAsArray, myComparisonProvider::compareByName); System.out.println("排序後:" + Arrays.toString(rosterAsArray)); // 靜態方法引用:ContainingClass::staticMethodName System.out.println("排序前:" + Arrays.toString(rosterAsArray)); Arrays.sort(rosterAsArray, ComparisonProvider::compareByAge); System.out.println("排序後:" + Arrays.toString(rosterAsArray)); // 特定類型的任意對象的實例方法的引用: ContainingType::methodName String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" }; System.out.println("排序前:" + Arrays.toString(stringArray)); Arrays.sort(stringArray, String::compareToIgnoreCase); System.out.println("排序後:" + Arrays.toString(stringArray)); // 構造器引用: ClassName::new Person newPerson = Person.create(Person::new); newPerson.setName("xiaocao"); newPerson.setBirthday(LocalDate.of(1995, 8, 20)); System.out.println(newPerson); } }
點擊查看結果
排序前:[[Fred, 1980-06-20], [Jane, 1990-07-15], [George, 1991-08-13], [Bob, 2000-09-12]]
排序後:[[Bob, 2000-09-12], [Fred, 1980-06-20], [George, 1991-08-13], [Jane, 1990-07-15]]
排序前:[[Bob, 2000-09-12], [Fred, 1980-06-20], [George, 1991-08-13], [Jane, 1990-07-15]]
排序後:[[Fred, 1980-06-20], [Jane, 1990-07-15], [George, 1991-08-13], [Bob, 2000-09-12]]
排序前:[Barbara, James, Mary, John, Patricia, Robert, Michael, Linda]
排序後:[Barbara, James, John, Linda, Mary, Michael, Patricia, Robert]
[xiaocao, 1995-08-20]
參考鏈接:
- https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
- https://blog.csdn.net/yitian_66/article/details/81010434
Java 8 方法引用