Java wird immer versuchen, die spezifischste anwendbare Version einer verfügbaren Methode zu verwenden (siehe JLS §15.12.2 ).
Object
, char[]
Und Integer
alle nehmen kann null
als gültigen Wert. Daher sind alle 3 Versionen anwendbar, sodass Java die spezifischste finden muss.
Da Object
es sich um den Supertyp von handelt char[]
, ist die Array-Version spezifischer als die Object
-Version. Wenn also nur diese beiden Methoden existieren, wird die char[]
Version ausgewählt.
Wenn sowohl die char[]
als auch die Integer
Version verfügbar sind, sind beide spezifischer als, Object
aber keine ist spezifischer als die andere, sodass Java nicht entscheiden kann, welche Version aufgerufen werden soll. In diesem Fall müssen Sie explizit angeben, welches Sie aufrufen möchten, indem Sie das Argument in den entsprechenden Typ umwandeln.
Beachten Sie, dass dieses Problem in der Praxis weitaus seltener auftritt, als man denkt. Der Grund dafür ist, dass dies nur passiert, wenn Sie explizit eine Methode mit null
oder mit einer Variablen eines eher unspezifischen Typs (z. B. Object
) aufrufen .
Im Gegenteil, der folgende Aufruf wäre völlig eindeutig:
char[] x = null;
doSomething(x);
Obwohl Sie den Wert immer noch übergeben null
, weiß Java genau, welche Methode aufgerufen werden muss, da der Typ der Variablen berücksichtigt wird.
Integer
zuint
.