Sélection de méthodes surchargées avec des valeurs nulles
En Java, les méthodes surchargées fournissent plusieurs versions avec différents paramètres ou types de retour, permettant une flexibilité et un code réutilisation. Cependant, choisir la bonne méthode lors du passage d'une valeur littérale nulle peut être source de confusion.
Considérons l'exemple suivant :
public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
Ici, la méthode méthode(null) choisit la méthode Surcharge (String), même si null est un type d'objet. Pour comprendre ce comportement, nous devons explorer l'approche Java des surcharges.
Sélection de méthode avec des valeurs nulles
En Java, le compilateur sélectionne la surcharge la plus spécifique capable de gérer le fourni des arguments sans erreur de type. Par exemple, method(Object) peut accepter n’importe quel type d’objet, y compris null. Cependant, method(String) ne peut accepter qu'une chaîne ou une valeur nulle. Puisque null est une valeur de chaîne valide, la méthode (String) est plus spécifique et est donc choisie.
Ambiguïté et erreurs de compilation
Dans l'exemple révisé ci-dessous :
public class MoneyCalc { public void method(StringBuffer sb) { System.out.println("StringBuffer Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
Le compilateur renvoie une erreur : "La méthode méthode (StringBuffer) est ambiguë pour le type MoneyCalc." En effet, la méthode (String) et la méthode (StringBuffer) sont également spécifiques pour un argument nul. Par conséquent, le compilateur ne peut pas déterminer quelle surcharge choisir, ce qui entraîne une erreur de compilation.
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!