Dieser Code:Kann nicht überladene Methode mit generischen Lambda lösen
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]));
}
kompiliert Erfolg mit jdk8u45 aber jdk8u60 druckt die folgende Fehlermeldung:
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
Ist es die JSL folgen, Warum Compiler kann nicht Überladene Methoden auflösen? War es ein fester Fehler in jdk8u45?
Weitere Informationen: kompiliert in javac 1.8.0_25, 1.8.0_40, ecj 3.10.2; schlägt mit der gleichen Nachricht in javac 1.9.0-ea-b72 fehl. Interessanter ist, dass das Ersetzen von 'i -> new String [i]' mit 'String [] :: new' das Problem in javac 1.9.0-ea-b72 behebt. –
ich glaube, es ist behoben, ich versuchte es in ideone, und es ist mit sun jdk 8u51 hier ist Link http://ideone.com/wvCXyO – user902383
Und mit jdk1.8.0_60 ersetzt ich -> neue String [i] mit String [] :: new behebt das Problem nicht. – And390