Methodenüberladung mit Nullargument: Mehrdeutigkeit auflösen
In Java ermöglicht die Methodenüberladung mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametertypen. Allerdings kann die Übergabe eines Nullarguments an überladene Methoden zu Compilerfehlern führen. Lassen Sie uns das Problem und seine Lösung untersuchen.
Bedenken Sie den folgenden Codeausschnitt:
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"); }
Der Aufruf von doSomething(null) führt aufgrund der Mehrdeutigkeit der Methode zu einem Kompilierungsfehler. Java kann nicht bestimmen, welche Version von doSomething aufgerufen werden soll, da Integer, char[] und Object alle Nullwerte akzeptieren können.
Das Problem liegt in der gleichermaßen spezifischen Natur der Integer- und char[]-Methoden. Beide sind spezifischer als die Object-Methode, da sie einen engeren Parametertyp definieren. Daher kann Java nicht einer Methode Vorrang vor der anderen geben.
Um diese Mehrdeutigkeit aufzulösen, müssen Sie die beabsichtigte Methode explizit angeben, indem Sie das Argument in den gewünschten Typ umwandeln. Zum Beispiel:
doSomething((Object) null); // Calls doSomething(Object obj) doSomething((char[]) null); // Calls doSomething(char[] obj)
Alternativ können Sie den Parametertyp in einer der überladenen Methoden auf nicht nullbar setzen. Dadurch würde sichergestellt, dass null nicht als Argument an diese Version übergeben werden kann. Zum Beispiel:
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"); }
Indem Sie das Argument umwandeln oder den Parametertyp nicht nullbar machen, stellen Sie Java zusätzliche Informationen zur Verfügung, um den Methodenaufruf eindeutig zu machen.
Das obige ist der detaillierte Inhalt vonWie kann die Mehrdeutigkeit einer Methodenüberladung mit Nullargumenten in Java behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!