2014-05-23 23 views
7

Während Typinterferenzen von Java 8 viel besser scheint, habe ich eine mögliche Einschränkung getroffen und ich bin mir nicht sicher, ob es einige Workaround Ich vermisse. Das Szenario:Typ Rückschlüsse Einschränkungen mit Lambda-Ausdrücken

class Foo<T> { 
    <U> void apply(Function<T, Consumer<U>> bar) {} 
} 

class Bar { 
    void setBar(String bar){} 
} 

Foo<Bar> foo = new Foo<>(); 

Dies funktioniert:

foo.<String>apply(bar -> bar::setBar); 

Dies gilt nicht:

foo.apply(bar -> bar::setBar); 

Gibt es eine Möglichkeit Typinferenz zu bekommen in dieser Art von Situation zu arbeiten?

+0

Es ist sicherlich ein Fehler eher als eine Einschränkung, weil Compiler alles weiß es in beiden Fällen muss. Aber Java-Geschichte gegeben, ich denke, es wird nicht behoben werden, bis Java 9 (in 5-10 Jahren) –

+0

Ich weiß nicht, ob es technisch ein Bug ist - ich hatte eine harte Zeit von der JLS zu sagen, wenn es darauf schließen sollte Fall oder nicht. Ich würde gerne wissen, ob ich noch etwas anderes tun kann, um Abhilfe zu schaffen. –

+2

Verwenden Sie eine IDE? Weil es nicht in Eclipse kompiliert, aber mit Javac für mich tut. –

Antwort

6

Es ist ein Eclipse Bug. Beide kompilieren gut mit Netbeans oder Javac.

Es scheint, dass Eclipse-quite einige issues mit Java verfügt über 8 ...

+0

Lektion gelernt - Wenn Eclipse ist seltsam, immer mit javac testen. –

+1

@JoshStone ... und umgekehrt. Es gibt Fälle, wo es genau umgekehrt ist ... – Marco13

Verwandte Themen