Java 8 Methodenreferenz Typ Rückschluss

9

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?

    
Louis Wasserman 13.08.2014, 16:45
quelle

1 Antwort

5

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,

%Vor%

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:

%Vor%

, die die Fehlermeldung erzeugt:

%Vor%

Beachten Sie, dass Verweise auf static Methoden die richtige Fehlermeldung erhalten:

%Vor%

erzeugt:

%Vor%     
Holger 13.08.2014 17:12
quelle

Tags und Links