Maison > Java > javaDidacticiel > le corps du texte

Pourquoi une valeur nulle choisit-elle la surcharge `String` dans la surcharge de méthode Java ?

DDD
Libérer: 2024-11-09 08:43:02
original
304 Les gens l'ont consulté

Why does a null value choose the `String` overload in Java method overloading?

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);
   }
}
Copier après la connexion

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);
   }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal