Mentre l'inferenza di tipo di Java 8 sembra molto migliorata, ho riscontrato un limite possibile e non sono sicuro che ci sia qualche soluzione che mi manca. Lo scenario:Limitazioni dell'inferenza di tipo con espressioni lambda
class Foo<T> {
<U> void apply(Function<T, Consumer<U>> bar) {}
}
class Bar {
void setBar(String bar){}
}
Foo<Bar> foo = new Foo<>();
Questo funziona:
foo.<String>apply(bar -> bar::setBar);
Questo non lo fa:
foo.apply(bar -> bar::setBar);
C'è un modo per ottenere l'inferenza di tipo a lavorare in questo tipo di situazione?
E 'certamente un bug piuttosto che una limitazione, perché compilatore non sa tutto quello che serve in entrambi i casi. Ma data la cronologia di Java, suppongo che non rimarrà fissa fino a Java 9 (in 5-10 anni) –
Non so se sia tecnicamente un bug - Ho avuto difficoltà a capire dal JLS se dovrebbe dedurre in questo caso o meno. Mi piacerebbe sapere se c'è qualcos'altro che posso fare per risolvere il problema però. –
Stai usando un IDE? Perché non si compila in Eclipse ma fa con javac per me. –