Maison > Java > javaDidacticiel > le corps du texte

Pourquoi la surcharge de méthode se comporte-t-elle différemment avec des valeurs nulles ?

Susan Sarandon
Libérer: 2024-11-11 06:32:03
original
446 Les gens l'ont consulté

Why Does Method Overloading Behave Differently with Null Values?

Surcharge de méthode et paramètre de valeur nulle

Les méthodes surchargées permettent à plusieurs méthodes portant le même nom mais des listes de paramètres différentes de coexister au sein d'une classe. Lors de l'appel d'une méthode surchargée, le compilateur sélectionne la méthode la plus applicable en fonction de la liste de paramètres transmise. Cependant, lorsqu'une valeur nulle est passée en paramètre, un comportement spécifique se produit.

Considérez le code suivant :

public class MoneyCalc {

    public void method(Object o) {
        System.out.println("Object Version");
    }

    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

Dans ce code, lors du passage de null à la méthode méthode, le « Version de chaîne » est exécuté au lieu de « Version d'objet ». En effet, null peut être implicitement converti en n'importe quel type de classe, y compris String. Par conséquent, le compilateur sélectionne la surcharge de méthode qui correspond le plus au type déduit de la référence nulle — dans ce cas, String.

Maintenant, modifiez légèrement le code :

public class MoneyCalc {

    public void method(StringBuffer sb) {
        System.out.println("StringBuffer Version");
    }

    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

Cette fois , une ambiguïté se produit car les méthodes StringBuffer et String sont également applicables à la référence null. Aucune des deux méthodes n'est plus spécifique que l'autre, le compilateur génère donc une erreur de compilation pour ce code.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal