Java essaiera toujours d'utiliser la version applicable la plus spécifique d'une méthode disponible (voir JLS §15.12.2 ).
Object
, char[]
et Integer
peuvent tous prendre null
comme valeur valide. Par conséquent, les 3 versions sont applicables, Java devra donc trouver la plus spécifique.
Puisqu'il Object
s'agit du super-type de char[]
, la version du tableau est plus spécifique que la Object
-version. Donc, si seulement ces deux méthodes existent, la char[]
version sera choisie.
Lorsque les versions char[]
et Integer
sont disponibles, les deux sont plus spécifiques, Object
mais aucune n'est plus spécifique que l'autre, de sorte que Java ne peut pas décider laquelle appeler. Dans ce cas, vous devrez mentionner explicitement celui que vous souhaitez appeler en convertissant l'argument dans le type approprié.
Notez qu'en pratique, ce problème se produit beaucoup plus rarement qu'on ne le pense. La raison en est que cela ne se produit que lorsque vous appelez explicitement une méthode avec null
ou avec une variable d'un type plutôt non spécifique (comme Object
).
Au contraire, l'invocation suivante serait parfaitement claire:
char[] x = null;
doSomething(x);
Bien que vous passiez toujours la valeur null
, Java sait exactement quelle méthode appeler, car elle prendra en compte le type de variable.
Integer
enint
.