Compiler-Falle: Comparator.reversed() und Lambda-Ausdrücke
Lambda-Ausdrücke bieten eine prägnante Möglichkeit, das Sortierverhalten anzupassen, aber wenn sie mit verwendet werden Comparator.reversed() tritt ein Kompilierungsfehler auf. Dieser Fehler ist auf die Unfähigkeit des Compilers zurückzuführen, den richtigen Zieltyp für das Lambda abzuleiten.
Den Fehler verstehen
Bedenken Sie den folgenden Beispielcode:
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
In diesem Fall tritt der Fehler auf, weil der Compiler den Typ des Parameters u im Lambda-Ausdruck nicht bestimmen kann. Um den Typ abzuleiten, benötigt der Compiler einen Zieltyp für das Lambda.
Normalerweise wird der Zieltyp durch den Kontext festgelegt, in dem das Lambda verwendet wird. In der ersten Zeile des von Ihnen bereitgestellten Codeausschnitts ist der Zieltyp Comparator
Lambda vs. Methodenreferenz
Der Fehler tritt nur auf, wenn ein Lambda-Ausdruck verwendet wird. Bei Verwendung einer Methodenreferenz (wie in der zweiten Zeile Ihres Codeausschnitts) wird der Zieltyp explizit durch die Methodensignatur bereitgestellt, wodurch das Problem der Typinferenz behoben wird.
Fehlerbehebung
Um den Fehler bei der Verwendung eines Lambda-Ausdrucks zu beheben, können Sie den Parametertyp explizit angeben:
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
Damit wird u explizit angegeben vom Typ „Benutzer“, sodass der Compiler den Zieltyp korrekt ableiten kann.
Compiler-Schwäche
Der fragliche Fehler weist auf eine Schwäche im Typ-Inferenzmechanismus des Compilers hin. Der genaue Grund, warum die Methode reversed() die Zieleingabe stört, ist unklar. Zukünftige Compiler-Verbesserungen könnten dieses Problem beheben und die Verwendung von Lambda-Ausdrücken ohne explizite Parametertypisierung ermöglichen.
Das obige ist der detaillierte Inhalt vonWarum verursacht „Comparator.reversed()' Kompilierungsfehler mit Java-Lambda-Ausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!