Questo codice:non può risolvere metodo di overload con lambda generico
public static void f(String[] args) {}
public static void f(Integer[] args) {}
public static void main(String[] args)
{
f(Stream.of("xxx").toArray(i -> new String[i]));
}
compila il successo con jdk8u45 ma jdk8u60 stampa il seguente errore:
Error:(17, 9) java: reference to f is ambiguous
both method f(java.lang.String[]) in type_infer.Test and method f(java.lang.Integer[]) in type_infer.Test match
Ne segue la JSL, perché compilatore non può risolvere i metodi sovraccarichi? Era un bug fisso in jdk8u45?
Ulteriori informazioni: compila bene in javac 1.8.0_25, 1.8.0_40, ecj 3.10.2; fallisce con lo stesso messaggio in javac 1.9.0-ea-b72. Più interessante è che la sostituzione di 'i -> new String [i]' con 'String [] :: new' risolve il problema in javac 1.9.0-ea-b72. –
credo sia corretto, l'ho provato in ideone, e sta usando sun jdk 8u51 qui è link http://ideone.com/wvCXyO – user902383
E con jdk1.8.0_60 sostituendo i -> new String [i] con String [] :: new non risolve il problema. – And390