Surcharge de méthodes avec des arguments nuls : résoudre l'ambiguïté
La surcharge de méthodes de Java autorise plusieurs méthodes avec le même nom mais des paramètres différents. Cependant, lors de l'appel d'une méthode avec un argument nul, le compilateur peut rencontrer une ambiguïté s'il existe plusieurs méthodes applicables.
Dans l'extrait de code donné, nous avons trois méthodes doSomething avec les paramètres Object, char[] et Entier. Lors de l’appel de doSomething(null), une erreur de méthode ambiguë se produit. Examinons le problème.
Résolution d'ambiguïté
Java donne la priorité à la version de méthode applicable la plus spécifique (JLS §15.12.2). Les trois méthodes acceptent null comme argument valide, ce qui les rend également applicables.
Object vs. char[]
Object est le supertype de char[], ce qui signifie char[] est plus spécifique que Object. Par conséquent, si seules les méthodes Object et char[] existent, la méthode char[] serait sélectionnée.
Object vs. Integer
Cependant, avec les deux char Les méthodes [] et Integer sont présentes, aucune n'est plus spécifique que l'autre. Java ne peut pas déterminer lequel appeler, ce qui entraîne une ambiguïté.
Solution
Pour résoudre l'ambiguïté, convertissez explicitement l'argument nul en type souhaité :
doSomething((Integer) null);
Dans ce cas, le compilateur appellera explicitement le doSomething(Integer obj) méthode.
Pertinence pratique
L'ambiguïté avec des arguments nuls est moins courante qu'on pourrait le penser. Cela se produit généralement lors de l'appel explicite d'une méthode avec null ou de l'utilisation d'une variable d'un type non spécifié (comme Object).
En revanche, si vous transmettez une variable à une méthode, telle que :
char[] x = null; doSomething(x);
Java déterminera correctement la méthode prévue en fonction du type de variable, malgré le passage d'une valeur nulle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!