Surcharge de méthodes pour les arguments nuls : résolution de l'ambiguïté
La surcharge de méthodes permet aux classes de définir plusieurs méthodes avec le même nom mais des listes de paramètres différentes. Bien que cela offre de la flexibilité, cela peut parfois conduire à une ambiguïté lorsqu'il s'agit d'arguments nuls.
Considérez le code Java suivant :
public static void doSomething(Object obj) { System.out.println("Object called"); } public static void doSomething(char[] obj) { System.out.println("Array called"); } public static void doSomething(Integer obj) { System.out.println("Integer called"); }
Si nous appelons doSomething(null), le compilateur génère un erreur due à des méthodes ambiguës. En effet, null peut être attribué à l'un des trois types de paramètres (Object, char[], Integer).
Détermination de l'ambiguïté
Pour comprendre l'ambiguïté, nous devons considérer le concept de spécificité dans la surcharge de méthodes. Java préfère appeler la méthode applicable la plus spécifique. Dans ce cas, les trois méthodes peuvent potentiellement accepter null.
Cependant, char[] et Integer sont plus spécifiques que Object car ils représentent une plage plus étroite de valeurs qui peuvent leur être attribuées. Par conséquent, si seulement doSomething(Object) et doSomething(char[]) étaient présents, Java choisirait ce dernier.
Résoudre l'ambiguïté
Lorsque les deux doSomething(char []) et doSomething(Integer) sont disponibles, aucun n'est plus spécifique que l'autre. Cela crée une ambiguïté et force le compilateur à échouer.
Pour résoudre ce problème, nous devons indiquer explicitement quelle méthode nous voulons appeler en convertissant l'argument nul en type souhaité. Par exemple :
doSomething((char[]) null);
Considérations pratiques
En pratique, la surcharge de méthode avec des arguments nuls est moins courante qu'il n'y paraît. En règle générale, nous ne transmettons pas explicitement null à moins que la méthode ne l'exige, et si nous transmettons null, nous avons généralement un type spécifique en tête.
En gardant ces considérations à l'esprit, nous pouvons garantir que nos méthodes surchargées restez sans ambiguïté et évitez les erreurs du compilateur lors du traitement d'arguments nuls.
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!