Heim > Java > javaLernprogramm > Warum verursacht „Comparator.reversed()' von Java 8 Typinferenzkonflikte mit Lambda-Ausdrücken?

Warum verursacht „Comparator.reversed()' von Java 8 Typinferenzkonflikte mit Lambda-Ausdrücken?

Barbara Streisand
Freigeben: 2024-12-14 20:05:17
Original
733 Leute haben es durchsucht

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

Typinferenzkonflikte behindern umgekehrte Lambda-Komparatoren

Trotz ihrer weit verbreiteten Verwendung stellt die Comparator.reversed()-Methode von Java 8 in Kombination eine Kompilierungshürde dar mit Lambda-Ausdrücken, was zu folgendem Fehler führt:

com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol
            userList.sort(Comparator.comparing(u -> u.getName()).reversed());
                                                     ^
symbol:   method getName()
location: variable u of type Object
1 error
Nach dem Login kopieren

Dieses Problem ist auf eine Einschränkung im Typinferenzmechanismus des Compilers zurückzuführen. Wenn ein Lambda-Ausdruck mit Comparator.comparing() verwendet wird, ist ein Zieltyp erforderlich, um auf den Typ des Parameters zu schließen. Im ersten Beispiel wird aufgrund des folgenden Zieltyps festgestellt, dass u vom Typ „Benutzer“ ist:

Comparator.comparing() -> Function<User, User.getName()> -> User
Nach dem Login kopieren

Wenn jedoch reversed() eingeführt wird, wird der Zieltyp gestört und der Compiler kann nicht mehr Den richtigen Typ ableiten.

Um dieses Problem zu lösen, kann man auf die Verwendung von Methodenreferenzen zurückgreifen, die zusätzlichen Typ bereitstellen Informationen:

userList.sort(Comparator.comparing(User::getName).reversed());
Nach dem Login kopieren

Alternativ kann ein expliziter Parametertyp im Lambda angegeben werden:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
Nach dem Login kopieren

Es bleibt abzuwarten, ob zukünftige Compilererweiterungen diese Hürde bei der Typinferenz beheben werden.

Das obige ist der detaillierte Inhalt vonWarum verursacht „Comparator.reversed()' von Java 8 Typinferenzkonflikte mit Lambda-Ausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage