Methodenüberladung und Nullwertparameter
Überladene Methoden ermöglichen die Koexistenz mehrerer Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten innerhalb einer Klasse. Beim Aufruf einer überladenen Methode wählt der Compiler anhand der übergebenen Parameterliste die am besten geeignete Methode aus. Wenn jedoch ein Nullwert als Parameter übergeben wird, tritt ein bestimmtes Verhalten auf.
Beachten Sie den folgenden Code:
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); } }
In diesem Code wird bei der Übergabe von Null an die Methode method die „String Version“ wird anstelle von „Object Version“ ausgeführt. Dies liegt daran, dass null implizit in jeden Klassentyp konvertiert werden kann, einschließlich String. Daher wählt der Compiler die Methodenüberladung aus, die am ehesten dem abgeleiteten Typ der Nullreferenz entspricht – in diesem Fall String.
Ändern Sie nun den Code leicht:
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); } }
Diesmal , tritt eine Mehrdeutigkeit auf, da sowohl die StringBuffer- als auch die String-Methode gleichermaßen auf den Nullverweis anwendbar sind. Keine der Methoden ist spezifischer als die andere, daher löst der Compiler einen Kompilierzeitfehler für diesen Code aus.
Das obige ist der detaillierte Inhalt vonWarum verhält sich die Methodenüberladung bei Nullwerten anders?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!