Java 中通過 “類::實例方法” 方式獲取方法引用的原理是什么?

Java 中通過 “類::實例方法” 方式獲取方法引用的原理是什么?

Java 方法引用:類::實例方法 的原理詳解

Java 中的方法引用提供了一種簡潔的語法,用于替代 Lambda 表達式。 類::實例方法 這種形式的方法引用,其工作原理值得深入探討。

核心概念:方法引用表達式與隱式 this

類::實例方法 本質上是一個方法引用表達式,它在編譯時被轉換為一個方法調用。關鍵在于理解實例方法的隱式 this 參數。

當調用一個實例方法時,第一個參數總是隱式存在的,即該方法所屬的對象實例(this)。 方法引用表達式會自動處理這個隱式參數。

立即學習Java免費學習筆記(深入)”;

示例分析:String::toUpperCase

讓我們分析文中提供的例子:

List<String> list = new ArrayList<>(); Collections.addAll(list, "a", "b", "c"); list.stream()     .map(String::toUpperCase)     .forEach(System.out::println);

String::toUpperCase 引用了 String 類的 toUpperCase() 實例方法。 map 方法接受一個函數作為參數,這個函數需要一個 String 類型的參數并返回一個 String 類型結果。 String::toUpperCase 正好滿足這個要求:

  1. 隱式 this: map 方法傳入的每個 String 對象都作為 toUpperCase() 方法的隱式 this 參數。
  2. 參數匹配: toUpperCase() 方法本身不需要額外參數,與 map 方法的參數類型完美匹配。

編譯器如何處理:

編譯器會將 String::toUpperCase 轉換為一個 Lambda 表達式,例如:

(String str) -> str.toUpperCase()

然后,編譯器再將這個 Lambda 表達式轉換為一個函數對象,最終由 map 方法調用。

總結:

類::實例方法 方法引用的工作原理是:

  1. 隱式 this 傳遞: 方法所屬對象的實例作為方法的第一個參數隱式傳遞。
  2. 參數類型匹配: 方法引用的參數類型必須與目標方法(例如 map 方法的函數參數)的參數類型相匹配。 如果目標方法需要多個參數,則方法引用也必須對應多個參數。

因此,類::實例方法 的簡潔語法實際上隱藏了對 this 的隱式傳遞和 Lambda 表達式的轉換過程,使得代碼更易讀和編寫。 理解這個隱式 this 的作用是掌握方法引用的關鍵。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享