Methodenüberladung mit mehrdeutigen Nullargumenten
Wenn die Methodenüberladung Parameter umfasst, die Nullwerte akzeptieren können, kann es bei Java zu Unklarheiten bei der Auswahl der geeigneten Methode kommen aufrufen. Schauen wir uns ein Beispiel an, um das Problem zu verstehen.
Betrachten Sie die folgenden drei Methoden mit Parametern:
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"); }
Wenn wir doSomething(null) aufrufen, wirft der Compiler eine „mehrdeutige Methode“ aus. Fehler. Der Grund dafür ist, dass alle drei Methoden Null als gültigen Wert akzeptieren können.
Das Problem entsteht jedoch speziell durch das Vorhandensein sowohl der Integer- als auch der char[]-Methode. Da Object der Supertyp von char[] ist, ist die Array-Version spezifischer als die Object-Version. Wenn also nur die Methoden Object und char[] vorhanden wären, würde die Array-Version ausgewählt.
Wenn jedoch auch die Integer-Version verfügbar ist, werden sowohl diese als auch die Array-Version spezifischer als die Object-Version . In diesem Fall kann Java nicht bestimmen, welche Methode für die Behandlung von Null besser geeignet ist.
Um diese Mehrdeutigkeit aufzulösen, kann man das Argument explizit in den gewünschten Typ umwandeln. Zum Beispiel:
doSomething((char[]) null);
In diesem Fall wählt Java eindeutig die char[]-Version.
In der Praxis kommt diese Mehrdeutigkeit weniger häufig vor, als es den Anschein hat. Typischerweise werden Methoden mit Argumenten aufgerufen, die bestimmte Typen haben, anstatt sich auf Null- oder sehr generische Typen wie Object zu verlassen. Es ist jedoch wichtig, diese potenzielle Mehrdeutigkeit zu verstehen, wenn Sie mit Methodenüberladung und Nullwerten arbeiten.
Das obige ist der detaillierte Inhalt vonWie geht Java mit mehrdeutiger Methodenüberladung mit Nullargumenten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!