Übergeben Sie null an die Methode, die String, nicht Object, bevorzugt

8

Ich stehe in meinem Programm vor einem Problem, und ich habe es mit einem kleinen Codeausschnitt unten klargestellt. Kann jemand erklären, warum das passiert?

%Vor%

Dies gibt immer I am null string aus.

Ich möchte den Grund wissen, damit ich den Code ändern kann.

    
ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ 23.02.2013, 23:04
quelle

3 Antworten

11

Das liegt daran, dass im Falle einer Überladung der Methode

  

Die spezifischste Methode wird zur Kompilierzeit ausgewählt.

Als 'java.lang.String' ist ein spezifischer Typ als 'java.lang.Object'. In Ihrem Fall wird die Methode gewählt, die 'String' als Parameter verwendet.

Es ist eindeutig in JLS dokumentiert:

  

Der zweite Schritt sucht den im vorherigen Schritt ermittelten Typ   Mitglied Methoden. Dieser Schritt verwendet den Namen der Methode und die Typen von   Die Argumentausdrücke zum Auffinden von Methoden, auf die beide zugreifen können   und anwendbar, das heißt, Deklarationen, die korrekt aufgerufen werden können   auf die gegebenen Argumente.

     

Es kann mehr als eine solche Methode geben, in   In diesem Fall wird der spezifischste ausgewählt. Der Deskriptor (Unterschrift   plus Rückgabetyp) der spezifischsten Methode wird zur Laufzeit verwendet   um den Methodenversand durchzuführen.

    
PermGenError 23.02.2013, 23:05
quelle
5

Ich stimme dem bestehenden Kommentar zur Auswahl der spezifischsten Methode zu. Sie können erzwingen, dass Ihr NULL als Objektreferenz behandelt wird, indem Sie die String-Argumentmethode umgehen, indem Sie sie umsetzen:

%Vor%     
Patricia Shanahan 23.02.2013 23:22
quelle
2

Siehe Abschnitt 15.12.2.5 von jls, die detailliert angeben, wie

zu wählen ist

Die spezifischste Methode wird zur Kompilierzeit ausgewählt

    
santosh kumar 31.12.2014 04:23
quelle

Tags und Links