comparing und thenComparing gibt Kompilierungsfehler

8

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

  

Type mismatch: cannot convert from Comparator<Object> to <unknown>

%Vor%

aber es funktioniert, wenn ich den Typ explizit angeben

%Vor%

oder durch Erstellen von zwei Compartor s und Kette

%Vor%

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%     
Saravana 09.11.2016, 04:43
quelle

1 Antwort

2

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:

%Vor%

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:

%Vor%     
Ole V.V. 09.11.2016 08:46
quelle

Tags und Links