Der folgende Code kompiliert mit Javac und mit Eclipse 4.6.1/4.6, aber erzeugt einen Fehler in Eclipse 4.6.2:Eclipse oder Javac Bug; Lambda Typinferenz
package ecbug;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Foo
{
class A
{
public int getStart() { return 0; }
}
void someMethod(List<A> toRemove)
{
Collections.sort(toRemove, Comparator.comparing(t -> -t.getStart()));
}
}
Eclipse-4.6.2 beklagt, unter -t.getStart()
, dass Es gibt einen Type Mismatch: Konnte nicht von Int in Comparable < konvertieren? super Vergleichbar <? Super U > >.
Ich würde denken, dass die Argumente zu Comparator.comparing(...)
ein Comparable<T>
mit T = A
sein sollten, mit funktionaler Methode compareTo die int
zurückzugibt. Eclipse scheint zu glauben, dass die Lambda-Funktion Comparable < zurückgeben sollte? super Vergleichbar <? Super U > > jedoch.
ich stark ein Eclipse-Fehler vermuten, aber es gibt sicherlich Fälle, in denen von Eclipse die Sprachspezifikation und Javac nicht hat korrekt umgesetzt hat, so dass es zu fragen wert scheint: das ist ein Eclipse-Bug oder ein Javac Bug? Können Sprachanwälte auf die relevanten Teile der Sprachspezifikation hinweisen?
Möglicherweise verwandte Fragen, die in meinen Augen sind keine Duplikate:
Java 8 Stream flatMap and group by code compiler error - ähnliche Fehlermeldung, aber unklar, ob es genau das gleiche Problem ist; Die Antwort behauptet, dass es sich um einen Eclipse-Bug handelt, bietet aber keine Bug-Links oder JLS-Zitate; bezieht sich auf alte Eclipse-Version.
Why didn't this java 8 example using type inference compile in Eclipse? - ähnlich wie bei früheren
Java Stream collect after flatMap returns List<Object> instead of List<String> - auch hier kann ein anderes Problem sein; Kommentare beanspruchen Eclipse-Problem, rechtfertigen aber nicht durch Verweis auf JLS noch bieten sie einen Link zu einem Eclipse-Fehlerbericht.
Ich habe in den letzten Jahren einige Fragen wie diese gesehen. Hast du wirklich gründlich gesucht? –
@ T.J.Crowder ist es schwierig, die richtigen Suchbegriffe für etwas so spezifisch zu finden, aber ich habe eine Weile gesucht, ja. Es gibt einige Fragen, die einen verwandten Fehler anzeigen können (zB http://stackoverflow.com/questions/25853988/why-didnt-this-java-8-example-using-type-inference-compile-in-eclipse/25854229) aber ich kann keine finden, die sich auf die Sprachspezifikation beziehen, nach der ich hier gefragt habe. – davmac
Kompiliert ohne Fehler für mich (Eclipse 4.6) –