ten kod:Nie można rozwiązać metodą przeładowany generycznego lambda
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]));
}
kompiluje sukces z jdk8u45 ale jdk8u60 drukuje się następujący błąd:
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
nie wynika z JSL, dlaczego kompilator nie może rozwiązać przeciążone metody? Czy był to naprawiony błąd w jdk8u45?
Więcej informacji: kompilacja dobrze w javac 1.8.0_25, 1.8.0_40, ecj 3.10.2; kończy się niepowodzeniem z tym samym komunikatem w javac 1.9.0-ea-b72. Bardziej interesujące jest to, że zamiana 'i -> new String [i]' na 'String [] :: new' rozwiązuje problem w javac 1.9.0-ea-b72. –
Naprawiłem i naprawiłem, wypróbowałem to w ideowym, i używa Sun jdk 8u51 tutaj jest link http://ideone.com/wvCXyO – user902383
I z jdk1.8.0_60 zastępując i -> new String [i] z String [] :: new nie rozwiązuje problemu. – And390