首頁  >  文章  >  Java  >  Java 中的 Lambda 表達式是否可以比較?

Java 中的 Lambda 表達式是否可以比較?

Linda Hamilton
Linda Hamilton原創
2024-10-31 04:16:01994瀏覽

Can Lambda Expressions Be Compared for Equality in Java?

Lambda 函數可以比較嗎?

問題:

在 Java 中,使用 lambda 表達式時,有沒有辦法比較它們是否相等?

答案:

從規範角度來看:

語言規範僅保證評估lambda 表達式將產生實現目標功能介面的類別的實例。但是,它不提供有關這些實例的身份或別名的保證。

從實作角度來看:

目前的 Java 實作在合成之間建立了 1:1 關係用於實現 lambda 及其捕獲位點的類別。如果在相同的捕獲站點評估相同的 lambda,而不捕獲任何變量,則會產生相同的實例,並且可以使用引用相等 (==) 進行比較。

對於可序列化的 lambda,可以輕鬆檢索它們的狀態,但代價是效能和安全性下降。

全面平等的挑戰:

確定兩個lambda 是否具有相同的功能介面和行為函數通常是不可行的相等,因為:

  • 不可序列化的lambda 可能不會公開其所有組件進行比較。
  • 單獨編譯的檔案可能會將相同的lambda 轉換為相同的函數介面類型,導致比較不切實際.

當前功能和限制:

方法引用將來可能具有可自訂的等式定義,以允許它們用作偵聽器。

Java 專家小組考慮公開資訊以提供更具選擇性的 equals/hashCode 和 lambda 的描述性 toString 方法。然而,由於對大多數用戶的潛在效能影響,他們決定不這樣做。

在toString方面,沒有明確的結論,但雙方都有爭論,留下了重新討論這個問題的可能性未來。

以上是Java 中的 Lambda 表達式是否可以比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn