首頁 >Java >java教程 >為什麼 Java 8 的 Comparator.reversed() 會導致 Lambda 表達式的型別推斷衝突?

為什麼 Java 8 的 Comparator.reversed() 會導致 Lambda 表達式的型別推斷衝突?

Barbara Streisand
Barbara Streisand原創
2024-12-14 20:05:17734瀏覽

Why Does Java 8's `Comparator.reversed()` Cause Type Inference Conflicts with Lambda Expressions?

型別推斷衝突阻礙反向Lambda 比較器

儘管Java 8 的Comparator.reversed() 方法被廣泛使用,但組合時會帶來編譯障礙使用lambda表達式,導致以下結果錯誤:

此問題源自於編譯器類型推論機制的限制。當 lambda 表達式與 Comparator.comparing() 一起使用時,它需要目標類型來推斷參數的類型。在第一個例子中,由於以下目標類型,u被確定為User類型:

但是,當引入reverse()時,目標類型被打亂,編譯器無法再推斷正確的類型。

要解決此問題,可以求助於使用方法引用,它提供了額外的類型資訊:

或者,可以在lambda 中指定明確參數類型:

未來的編譯器增強功能是否會解決此類型推斷障礙還有待觀察。

以上是為什麼 Java 8 的 Comparator.reversed() 會導致 Lambda 表達式的型別推斷衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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