Maison > Java > javaDidacticiel > Comment résoudre l'ambiguïté de surcharge de méthode avec des arguments nuls en Java ?

Comment résoudre l'ambiguïté de surcharge de méthode avec des arguments nuls en Java ?

DDD
Libérer: 2025-01-01 05:44:10
original
511 Les gens l'ont consulté

How to Resolve Method Overloading Ambiguity with Null Arguments in Java?

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

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

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

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!

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