Surcharge de méthode avec des arguments nuls ambigus
Lorsque la surcharge de méthode implique des paramètres pouvant accepter des valeurs nulles, Java peut rencontrer une ambiguïté dans la sélection de la méthode appropriée invoquer. Examinons un exemple pour comprendre le problème.
Considérez les trois méthodes suivantes avec des paramètres :
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 lancera une "méthodes ambiguës" erreur. La raison en est que les trois méthodes peuvent accepter null comme valeur valide.
Cependant, le problème découle spécifiquement de la présence des méthodes Integer et char[]. Puisque Object est le supertype de char[], la version du tableau est plus spécifique que la version Object. Ainsi, en présence uniquement des méthodes Object et char[], la version tableau serait choisie.
Mais lorsque la version Integer est également disponible, elle et la version tableau deviennent plus spécifiques que la version Object. . Dans ce cas, Java ne peut pas déterminer quelle méthode est la plus appropriée pour gérer null.
Pour résoudre cette ambiguïté, on peut explicitement convertir l'argument en type souhaité. Par exemple :
doSomething((char[]) null);
Dans ce cas, Java choisira sans ambiguïté la version char[].
En pratique, cette ambiguïté est moins courante qu'il n'y paraît. En règle générale, les méthodes sont invoquées avec des arguments ayant des types spécifiques, plutôt que de s'appuyer sur des types nuls ou hautement génériques comme Object. Cependant, il est crucial de comprendre cette ambiguïté potentielle lorsque l'on travaille avec une surcharge de méthodes et des valeurs nulles.
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!