Java überladen Regeln

Stieß ich auf zwei überlastung Fragen vor kurzem, dass ich nicht finden können, eine Antwort haben und keine java-Umgebung laufen einige test-code. Ich hoffe jemand kann mir helfen, durch zusammenstellen einer Liste von all den Regeln, die java-Compiler Folgen Sie für überlastung oder alternativ verweist mich an eine Liste, die bereits vorhanden ist.

Ersten, wenn die beiden Methoden unterscheiden sich nur durch eine endgültige varargs-parameter, unter welchen Umständen jeder genannt und können Sie rufen Sie die varargs-Methode ohne Argumente?

private void f(int a) { /* ... */ }
private void f(int a, int... b) { /* ... */ }

f(12); //calls the former? I would expect it to
f(12, (int[])null); //calls latter, but passes null for b? 
  //Can I force the compiler to call the second method in the same fashion
  //as would happen if the first method didn't exist?

Zweite Frage, wenn die beiden Methoden unterscheiden sich durch die Arten geerbt, die von einer anderen aufgerufen wird? Ich würde erwarten, dass die abgeleitete version, genannt zu werden, und Gießen darf, rufen die anderen.

interface A {}
class B implements A {}
class C implements A {}

private void f(A a) {}
private void f(B b) {}

f(new C()); //calls the first method
f(new B()); //calls the second method?
f((A)(new B()); //calls the first method using a B object?

Diese zwei Beispiele, sondern als code-reader würde ich lieber eine kanonische Liste der genauen bestellt, Regeln für die Lösung das, weil ich Häufig keine Zeit haben, um die Einrichtung einer build-Umgebung zu überprüfen, was der compiler tut.

InformationsquelleAutor Peter Oehlert | 2012-06-05

Schreibe einen Kommentar