Methodenüberladung mit Nullargumenten: Mehrdeutigkeit auflösen
Die Methodenüberladung von Java ermöglicht mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametern. Beim Aufrufen einer Methode mit einem Nullargument kann der Compiler jedoch auf Unklarheiten stoßen, wenn mehrere anwendbare Methoden vorhanden sind.
Im angegebenen Codeausschnitt haben wir drei doSomething-Methoden mit den Parametern Object, char[] und Ganze Zahl. Beim Aufruf von doSomething(null) tritt ein mehrdeutiger Methodenfehler auf. Lassen Sie uns näher auf das Problem eingehen.
Mehrdeutigkeitsauflösung
Java priorisiert die spezifischste anwendbare Methodenversion (JLS §15.12.2). Alle drei Methoden akzeptieren null als gültiges Argument und sind daher gleichermaßen anwendbar.
Object vs. char[]
Object ist der Supertyp von char[], was bedeutet char[] ist spezifischer als Object. Wenn daher nur die Methoden Object und char[] vorhanden wären, würde die Methode char[] ausgewählt werden.
Object vs. Integer
Allerdings mit beiden Methoden char [] und Integer-Methoden vorhanden, keine ist spezifischer als die andere. Java kann nicht bestimmen, welches aufgerufen werden soll, was zu Mehrdeutigkeiten führt.
Lösung
Um die Mehrdeutigkeit aufzulösen, wandeln Sie das Nullargument explizit in den gewünschten Typ um:
doSomething((Integer) null);
In diesem Fall ruft der Compiler explizit doSomething(Integer obj) auf. Methode.
Praktische Relevanz
Mehrdeutigkeit mit Nullargumenten kommt seltener vor, als man denken könnte. Dies tritt typischerweise auf, wenn eine Methode explizit mit Null aufgerufen wird oder eine Variable eines nicht spezifizierten Typs (wie Object) verwendet wird.
Im Gegensatz dazu, wenn Sie eine Variable an eine Methode übergeben, wie zum Beispiel:
char[] x = null; doSomething(x);
Java bestimmt die beabsichtigte Methode anhand des Variablentyps korrekt, obwohl ein Nullwert übergeben wird.
Das obige ist der detaillierte Inhalt vonWie löst Java die Mehrdeutigkeit einer Methode mit Nullargumenten auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!