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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 06:32:03486parcourir

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);
    }
}

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);
    }
}

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!

Déclaration:
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