Lazy loaded image
Java Method Reference
字数 698阅读时长≈ 2 分钟
2024-6-24
2025-6-17
23

什麼是Method Reference

Java的方法參考或稱方法引用(Method Reference)是Java 8中引入的一個新特性,它可以用來直接參考已存在的方法或建構子,通常用在lambda表達式中。方法參考通過使用::符號來表示,例如System.out::println直接參考了println方法。
方法參考通常在foreach表達式中使用,可以使程式碼更簡潔易讀。例如,list.forEach(System.out::println);可以用於列印列表中的每個元素。

使用與未使用方法參考的比較

實例1

在Java中,我們通常會使用lambda表達式來操作集合。例如,如果我們想要列印出一個列表中的所有元素,我們可能會寫出以下的程式碼:

java

list.forEach(item -> System.out.println(item));
Java
在這個例子中,item -> System.out.println(item)就是一個lambda表達式。然而,這個表達式可以進一步地被簡化,這就是方法參考的優點。
使用方法參考,上述的程式碼可以被簡化為:

java

list.forEach(System.out::println);
Java
在這個例子中,System.out::println就是一個方法參考。兩者的效果是完全相同的,但是使用方法參考的程式碼更為簡潔,可讀性也更高。
 

實例2

假設我們要對一個List中的每一個元素進行平方運算,我們可能會寫出以下的程式碼:

java

list.stream().map(item -> item * item).collect(Collectors.toList());
Java
在這個例子中,item -> item * item就是一個lambda表達式。然而,如果我們有一個已經寫好的方法可以進行平方運算,例如Math::pow,我們就可以利用方法參考來簡化程式碼。
使用方法參考,上述的程式碼可以被簡化為:

java

list.stream().map(Math::pow).collect(Collectors.toList());
Java
在這個例子中,Math::pow就是一個方法參考。兩者的效果是完全相同的,但是使用方法參考的程式碼更為簡潔,可讀性也更高。
 

Method Reference的四種類型

引用靜態方法

java

// 使用 Lambda 表達式 Consumer<Integer> consumer = x -> Math.abs(x); // 使用方法引用 Consumer<Integer> consumer = Math::abs;
Java

引用實例方法

java

// 使用 Lambda 表達式 Consumer<String> consumer = s -> s.toUpperCase(); // 使用方法引用 Consumer<String> consumer = String::toUpperCase;
Java

引用特定對象的實例方法

java

// 使用 Lambda 表達式 String str = "Hello"; Supplier<String> supplier = () -> str.toUpperCase(); // 使用方法引用 Supplier<String> supplier = str::toUpperCase;
Java

引用建構方法

java

// 使用 Lambda 表達式 Supplier<List<String>> supplier = () -> new ArrayList<>(); // 使用方法引用 Supplier<List<String>> supplier = ArrayList::new;
Java
這些例子展示了如何使用method reference來替代 Lambda 表達式,使代碼更加簡潔和易讀。

參考

 
上一篇
如何利用Github建立多個個人網站
下一篇
Java List初始化ArrayList

评论
Loading...