Ich bin verwirrt durch ein bisschen Java-Typ-Inferenz. Der folgende Code:
%Vor%bricht mit dem Kompilierfehler
%Vor%während das explizite generische
entfernt wird %Vor%funktioniert ebenso wie die anonyme innere Klasse der alten Schule
%Vor%Kann jemand vorschlagen, was hier vor sich geht?
Die Verwendung von <? extends T>
ist falsch, da für generische Aufrufe mit expliziten Typargumenten vollständige Typen und keine Platzhalter angegeben werden müssen.
Wenn Sie einfach
verwenden %Vor%Java leitet den Typ für Sie ab.
Eine Lösung wäre:
%Vor% obwohl es nicht klar ist, welchen Vorteil die Erweiterung des Function
Rückgabetyps auf ? extends T
haben soll. Für praktische Anwendungen,
ist die nützlichste Methodensignatur. Der ableitende Iterable::iterator
funktioniert dafür immer noch.
In Bezug auf die Compiler-Fehlermeldung scheint dies nur ein Fehler in der Fehlerberichterstattung zu sein, der immer dann gilt, wenn eine Methodenreferenz auf eine Nicht- static
-Methode einen Typenkonflikt hat. Es kann sogar durch die einfache Aussage reproduziert werden:
, die die Fehlermeldung erzeugt:
%Vor% Beachten Sie, dass Verweise auf static
Methoden die richtige Fehlermeldung erhalten:
erzeugt:
%Vor%