Ich versuche List
der Angestellten nach Namen zu sortieren und dann mit Java8 Comparator
zu altern, ich habe unten Comparator
erstellt, aber es gibt mir einen Compilerfehler
%Vor%
Type mismatch: cannot convert from Comparator<Object> to <unknown>
aber es funktioniert, wenn ich den Typ explizit angeben
%Vor% oder durch Erstellen von zwei Compartor
s und Kette
Ich habe den Typ Comparator<String>
auf der linken Seite angegeben, aber warum die automatische Typinferenz den richtigen Typ nicht findet und erwartet, dass er explizit spezifiziert wird.
Könnte jemand darüber klarstellen?
Hier ist der Code
%Vor%Ausgabe
%Vor% Java muss einen Typ aller Variablen kennen. In vielen lambdas kann er einen Typ ableiten, aber in Ihrem ersten Code-Snippet kann er den Typ von s
nicht erraten. Ich denke, der Standard Weg, um dieses Problem zu lösen, wäre es explizit zu erklären:
Wenn Sie sich diese Antwort ansehen, wird eine ähnliche Deklaration im Argument für Comparator.comparing()
angezeigt.
Ihre Methode, die explizit die Typargumente von comparing()
verwendet, funktioniert offensichtlich auch.
Für Ihre andere Methode, zwei Komparatoren zu deklarieren, bin ich ziemlich zuversichtlich, dass Java in diesem Fall von der String
auf der linken Seite der Zuweisung schließen kann, genau wie in der konventionellen List <String> = new ArrayList<>();
. Wenn Sie thenComparing()
im selben Ausdruck aufrufen, kann Java nicht mehr erkennen, dass der Typ von der linken Seite relevant ist. Es wäre ein bisschen wie int size = new ArrayList<>().size();
Das funktioniert auch:
Tags und Links java java-8 comparable comparator