Klingt ein bisschen dumm, aber ich brauche Hilfe bei meiner toString()
Methode und es ist sehr ärgerlich. Ich habe versucht, online nachzuschlagen, weil es das toString
ist, wo es vermasselt wird und "Kid Konstruktor # 2 nicht findet", obwohl es da ist und ich sogar etwas anderes machen würde und es nicht funktioniert. Ok, das war viel, also hier ist mein Code:
import java.util.*;
class Kid {
String name;
double height;
GregorianCalendar bDay;
public Kid () {
this.name = "HEAD";
this.height = 1;
this.bDay = new GregorianCalendar(1111,1,1);
}
public Kid (String n, double h, String date) {
// method that toString() can't find somehow
StringTokenizer st = new StringTokenizer(date, "/", true);
n = this.name;
h = this.height;
}
public String toString() {
return Kid(this.name, this.height, this.bDay);
}
} //end class
Ok Also mein toString oben (ich weiß, mein dritter Parameter ist aus, sollte ein String sein) ist aus. Wenn ich einen Wert für die dritte Sache fest codiere, geht er durcheinander und sagt, dass er diesen nicht finden kann (oben). Wie kann ich das Datum ermitteln und auflösen?
Die Klasse, die dies nennt, ist unten
class Driver {
public static void main (String[] args) {
Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009");
System.out.println(kid1.toString());
} //end main method
} //end class
Ich habe versucht, mehrere Konstruktoren zu erforschen, und es hat wirklich nicht geholfen. Ich habe versucht, toString()
Methoden zu erforschen , und habe versucht, frühere zu verwendentoString()
Methodenlogik zu verwenden, aber dies ist brandneu, sodass es nie funktioniert hat.
Hilfe?
toString()
Methode gibt keinen String zurück und Sie können einen solchen Konstruktor nicht aufrufen. Es ist unklar, was Sie überhaupt erreichen wollen. Bitte lesen Sie tinyurl.com/so-hints und klären Sie Ihre Frage.java.util.Date
,java.util.GregorianCalendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängten java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .Antworten:
Der
toString
soll a zurückgebenString
.Ich schlage vor, Sie nutzen die Funktionen Ihrer IDE, um die zu generieren
toString
Methode . Codieren Sie es nicht von Hand.Eclipse kann dies beispielsweise tun, wenn Sie einfach mit der rechten Maustaste auf den Quellcode klicken und auswählen
Source > Generate toString
quelle
StringBuilder
implizit. Es gibt kein Problem, wenn Sie es nicht in einer Schleife verwenden.Source -> Insert Code...
dann auswählentoString
Java toString () -Methode
Wenn Sie ein Objekt als Zeichenfolge darstellen möchten, wird die Methode toString () verwendet.
Die Methode toString () gibt die Zeichenfolgendarstellung des Objekts zurück.
Wenn Sie ein Objekt drucken, ruft der Java-Compiler intern die toString () -Methode für das Objekt auf. Wenn Sie also die toString () -Methode überschreiben, die gewünschte Ausgabe zurückgeben, kann dies der Status eines Objekts usw. sein. Dies hängt von Ihrer Implementierung ab.
Vorteil der Java toString () -Methode
Durch Überschreiben der toString () -Methode der Object-Klasse können wir Werte des Objekts zurückgeben, sodass wir nicht viel Code schreiben müssen.
Ausgabe ohne toString () -Methode
Sie können im obigen Beispiel Nr. 1 sehen. Beim Drucken von s1 und s2 werden die Hashcode-Werte der Objekte gedruckt, aber ich möchte die Werte dieser Objekte drucken. Da der Java-Compiler die toString () -Methode intern aufruft, werden beim Überschreiben dieser Methode die angegebenen Werte zurückgegeben. Lassen Sie es uns anhand des folgenden Beispiels verstehen:
Beachten Sie, dass toString () hauptsächlich mit dem Konzept des Polymorphismus in Java zusammenhängt. Versuchen Sie in Eclipse, auf toString () zu klicken und mit der rechten Maustaste darauf zu klicken. Klicken Sie dann auf Open Declaration (Deklaration öffnen) und sehen Sie, woher die Superklasse toString () stammt.
quelle
Sie können ein neues Objekt in toString () erstellen. verwenden
anstatt
Sie können die Rückgabezeichenfolge nach Bedarf ändern. Es gibt andere Möglichkeiten, das Datum anstelle des Kalanders zu speichern.
quelle
Sie können einen Konstruktor nicht so aufrufen, als wäre es eine normale Methode. Sie können ihn nur aufrufen
new
, um ein neues Objekt zu erstellen:Das Erstellen eines neuen Objekts aus Ihrer toString () -Methode ist jedoch nicht das, was Sie tun möchten.
quelle
Wie andere erklärten,
toString
ist dies nicht der richtige Ort, um Ihre Klasse zu instanziieren. Stattdessen soll dietoString
Methode eine Zeichenfolge erstellen, die den Wert einer Instanz Ihrer Klasse darstellt und über mindestens die wichtigsten in diesem Objekt gespeicherten Datenfelder berichtet. In den meisten Fällen,toString
wird es zum Debuggen und Protokollieren verwendet, nicht für Ihre Geschäftslogik.Fügen Sie eine andere Methode hinzu, um Text zu generieren, der den Wert eines Objekts darstellt, das einem Benutzer angezeigt werden soll. Die Leute nennen die Methode oft so etwas wie
getDisplayName
. Zum BeispielDayOfWeek::getDisplayName
undMonth::getDisplayName
.StringJoiner
Ab Java 8 und höher
toString
würde dieStringJoiner
Klasse die modernste Art der Implementierung verwenden . Wie der Arzt sagt:Verwenden Sie wie folgt:
quelle
Der folgende Code ist ein Beispiel. Gibt es eine schnellere Möglichkeit, eine IDE-basierte Konvertierung zu implementieren, damit die Änderungen in Zukunft nicht mehr immer wieder geändert werden müssen?
quelle
Wenn Sie an Unit-Tests interessiert sind, können Sie eine öffentliche "ToStringTemplate" deklarieren und anschließend Ihren toString einem Unit-Test unterziehen. Auch wenn Sie es nicht Unit-testen, denke ich, es ist "sauberer" und verwendet String.format.
Jetzt können Sie Unit-Tests durchführen, indem Sie das Kid erstellen, die Eigenschaften festlegen und Ihr eigenes string.format in der ToStringTemplate ausführen und vergleichen.
ToStringTemplate statisch-final zu machen bedeutet "EINE VERSION" der Wahrheit, anstatt eine "Kopie" der Vorlage im Unit-Test zu haben.
quelle
Nun, eigentlich müssen Sie so etwas zurückgeben, weil toString einen String zurückgeben muss
und wenn Sie im Konstruktor tatsächlich etwas falsch machen, setzen Sie die vom Benutzer festgelegte Variable auf den Namen, während Sie das Gegenteil tun müssen. Was du nicht tun solltest
Was du machen solltest
Hoffe das hilft danke
quelle
Wir können sogar so schreiben, indem wir ein neues String-Objekt in der Klasse erstellen und es im Konstruktor zuweisen, was immer wir wollen, und dieses in der überschriebenen toString-Methode zurückgeben
quelle
Der beste Weg ist meiner Meinung nach die Verwendung der Google Gson-Bibliothek:
oder Apache Commons Lang Reflection Way
quelle
Wenn Sie den Editor verwenden: dann
Wenn Sie die Eclipse-IDE verwenden, drücken Sie
-Klicken Sie hier auf die Methode zum Überschreiben der Zeichenfolge. Sie erhalten Optionen, um auszuwählen, welche Art von Variablen Sie auswählen möchten.
quelle
Eine gute und prägnante Möglichkeit ist die Verwendung von Lombok-Anmerkungen. Es verfügt über eine
@ToString
Anmerkung, die eine Implementierung dertoString()
Methode generiert . Standardmäßig wird Ihr Klassenname zusammen mit jedem Feld in der durch Kommas getrennten Reihenfolge gedruckt. Sie können Ihre Ausgabe einfach anpassen, indem Sie Parameter an Annotation übergeben, z.Welches ist das Äquivalent von reinem Java:
quelle
Wenn Sie nur
toString()
ein DTO zum Debuggen verwenden , können Sie automatisch eine lesbare Ausgabe mit folgenden Funktionen generieren :Dies ist jedoch nicht für Produktionsbereitstellungen geeignet, wenn das DTO möglicherweise PII enthält (die nicht in Protokollen erfasst werden sollten).
quelle
Immer einen einfachen Weg: Klicken Sie mit der rechten Maustaste auf > Generieren > toString () > wählen Sie die gewünschte Vorlage aus.
quelle