Rozważ następujące dwa zestawy metod. Pierwszy jest akceptowany, drugi odrzucany jako niejednoznaczny. Jedyna różnica polega na użyciu int i Integer.Niejednoznaczne metody varargs z obiektem i typem pierwotnym
Czy istnieje szczególna potrzeba odrzucenia drugiej? Oznaczałoby to, że zaakceptowanie go po boksie (które doprowadziło do pierwszego zestawu) ma problem. Czego tu brakuje?
Z mojego punktu widzenia, kompilator Java jest tutaj zbyt restrictve.
Zestaw 1:
public void test(Object... values) {}
public void test(Integer x, Object... values) {} // difference here
public void b() {
test(1, "y"); // accepted
}
Set 2:
public void test(Object... values) {}
public void test(int x, Object... values) {} // difference here
public void b() {
test(1, "y"); // marked as ambiguous
}
Set 2 daje błąd kompilatora:
error: reference to test is ambiguous
test(1, "y"); // marked as ambiguous
^
both method test(Object...) in T and method test(int,Object...) in T match
Java 1.8, Eclipse Oxygen
Metod z Zestawu 1 i Zestawu 2 należą do tej samej klasy? –
@RafaelVieiraCoelho Oczywiście, że nie. – Kayaman
tej samej klasy. Właśnie edytuję klasę, aby zmienić między nimi. –