Surcharge de méthode avec argument nul : résoudre l'ambiguïté
En Java, la surcharge de méthode autorise plusieurs méthodes portant le même nom mais des types de paramètres différents. Cependant, passer un argument nul à des méthodes surchargées peut entraîner des erreurs du compilateur. Explorons le problème et sa solution.
Considérez l'extrait de code 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"); }
L'appel de doSomething(null) entraîne une erreur de compilation en raison de l'ambiguïté de la méthode. Java ne peut pas déterminer quelle version de doSomething appeler puisque Integer, char[] et Object peuvent tous accepter des valeurs nulles.
Le problème réside dans la nature tout aussi spécifique des méthodes Integer et char[]. Les deux sont plus spécifiques que la méthode Object car elles définissent un type de paramètre plus restreint. Par conséquent, Java ne peut pas donner la priorité à une méthode par rapport à une autre.
Pour résoudre cette ambiguïté, vous devez spécifier explicitement la méthode souhaitée en convertissant l'argument dans le type souhaité. Par exemple :
doSomething((Object) null); // Calls doSomething(Object obj) doSomething((char[]) null); // Calls doSomething(char[] obj)
Vous pouvez également rendre le type de paramètre non nullable dans l'une des méthodes surchargées. Cela garantirait que null ne peut pas être transmis comme argument à cette version. Par exemple :
public static void doSomething(Object obj) { System.out.println("Object called"); } public static void doSomething(char[] obj) { // Parameter type not nullable System.out.println("Array called"); }
En convertissant l'argument ou en rendant le type de paramètre non nullable, vous fournissez à Java des informations supplémentaires pour lever l'ambiguïté de l'appel de méthode.
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!