In Java, warum ist der Aufruf foo () nicht mehrdeutig gegeben 2 varargs Methoden foo (int ... Ints) und foo (Object ... Objekte)?

StackOverflow https://stackoverflow.com/questions/951388

Frage

Wenn ich nur die 2 varargs Methoden erklären, wie folgt:

public void foo(String... strings) {
    System.out.println("Foo with Strings");
}

und

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

und haben dann den Code:

foo();

Dies ist ein Compiler-Fehler aufgrund der Mehrdeutigkeit, wie erwartet.

Allerdings, wenn ich nur die folgenden zwei Versionen von foo haben:

public void foo(Object... objects) {
    System.out.println("Foo with Objects");
}

und

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

dann der Code

foo();

ruft die Ints Version des Verfahrens. Kann mir jemand erklären, warum nicht in ähnlicher Weise zweideutig das zweite Beispiel ist und warum es zu dem int Methode über die Objektmethode löst. Danke.

War es hilfreich?

Lösung

Wenn ich mich erinnere richtig aus, wenn ich die scjp vorbereiteten, im ersten Fall haben Sie 2 Argumente ohne Beziehung zwischen ihnen, so dass der Compiler kann man nicht wählen.

In dem zweiten, mit Boxen aktiviert (1.5+), int kann Integer sein, die eine Teilmenge von Object ist, und der Compiler, im Fall eines Konflikts wird immer die spezifische Definition verwenden. So Integer (int) priorisiert wird.

Andere Tipps

Java wird immer die nächste Art möglich nutzen, so dass, wenn Sie Ints in die Methode übergeben, wenn Sie nicht die int haben ... Methode, es würde sich in ganzen Zahlen AutoBox und Objekt verwenden .... Da es eine int ... Methode, Java wird die erste verwenden. Dies ist eine Wahl in dem Java-Compiler Design.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top