問題:
在 Java 中,使用 lambda 表達式時,有沒有辦法比較它們是否相等?
答案:
從規範角度來看:
語言規範僅保證評估lambda 表達式將產生實現目標功能介面的類別的實例。但是,它不提供有關這些實例的身份或別名的保證。
從實作角度來看:
目前的 Java 實作在合成之間建立了 1:1 關係用於實現 lambda 及其捕獲位點的類別。如果在相同的捕獲站點評估相同的 lambda,而不捕獲任何變量,則會產生相同的實例,並且可以使用引用相等 (==) 進行比較。
對於可序列化的 lambda,可以輕鬆檢索它們的狀態,但代價是效能和安全性下降。
全面平等的挑戰:
確定兩個lambda 是否具有相同的功能介面和行為函數通常是不可行的相等,因為:
當前功能和限制:
方法引用將來可能具有可自訂的等式定義,以允許它們用作偵聽器。
Java 專家小組考慮公開資訊以提供更具選擇性的 equals/hashCode 和 lambda 的描述性 toString 方法。然而,由於對大多數用戶的潛在效能影響,他們決定不這樣做。
在toString方面,沒有明確的結論,但雙方都有爭論,留下了重新討論這個問題的可能性未來。
以上是Java 中的 Lambda 表達式是否可以比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!