Warum verursacht String (String) -Konstruktor mit Nullwert einen Fehler bei der Kompilierung? Ich denke, es gibt 2+ Konstruktor, der Object und wenn init nimmt. es mit null weiß nicht, welches zu beginnen ist. Ich frage mich, ob es einen anderen Grund gibt.
%Vor%Weil der Compiler nicht herausfinden konnte, welcher Konstruktor aufgerufen werden soll. Sehen Sie hier , wie viele Ein-Argument-Konstruktoren es hat.
[Bearbeitet] Du hast gesagt, wenn es einen anderen Grund gibt. Also warum nicht selbst ausprobieren? Mach so etwas,
%Vor%Wenn Sie einen Konstruktor oder eine Methode aufrufen, für die mehrere überschriebene Versionen gelten, wählt Java normalerweise den spezifischsten Konstruktor oder die Methode. Abschnitt 15.12.2 der Java-Sprachspezifikation erklärt dies in Detail.
Angenommen, Sie haben zwei überladene Methoden:
%Vor% Wenn Sie method(null)
aufrufen, gelten beide Methoden. Java wählt die spezifischste, in diesem Fall die zweite Methode, die ein String
- weil String
ist ein spezifischerer Typ als Object
.
Manchmal kann jedoch der spezifischste Konstruktor oder die Methode nicht bestimmt werden. Wenn wir uns die Konstruktoren der Klasse String
anschauen, die ein Argument haben:
Beachten Sie, dass zwischen den Typen byte[]
, char[]
, String
, StringBuffer
und StringBuilder
keine Hierarchie besteht. Daher ist es nicht möglich zu sagen, dass einer dieser Konstruktoren spezifischer ist als die anderen. Daher weiß der Java-Compiler nicht, welcher Konstruktor ausgewählt werden soll und gibt Ihnen einen Fehler.
Nur um der Lösung mehr Klarheit zu verleihen:
Nehmen Sie dieses Beispiel:
%Vor%Es wird keinen Kompilierzeitfehler verursachen, da der Compiler den spezifischsten Konstruktor der gleichen Typen auswählt. Wenn ich jedoch die Klasse zu
ändere %Vor%Es wird einen Kompilierzeitfehler verursachen. Da hier zwei separate Konstruktorhierarchien beteiligt sind, hat der Compiler keine Möglichkeit, eine Entscheidung zu treffen. Eine Hierarchie ist: Object - & gt; String und zweite ist Object - & gt; Long, also keine Möglichkeit, zwischen Long- oder String-Konstruktoren zu wählen.
String hat viele -Konstruktoren. null ist für sie verfügbar.
Bearbeiten: String hat 5 Ein-Argument-Konstruktor, in Java 6. Danke BoltClock und Adeel Ansari!