Kann mir jemand das toString()in der ObjectKlasse definierte Konzept der Methode erklären ? Wie wird es verwendet und wozu dient es?
Kann mir jemand das toString()in der ObjectKlasse definierte Konzept der Methode erklären ? Wie wird es verwendet und wozu dient es?
Antworten:
Aus den Object.toStringDokumenten:
Gibt eine Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen gibt die
toStringMethode eine Zeichenfolge zurück, die dieses Objekt "textuell darstellt". Das Ergebnis sollte eine präzise, aber informative Darstellung sein, die für eine Person leicht zu lesen ist. Es wird empfohlen, dass alle Unterklassen diese Methode überschreiben.Die
toStringMethode für die KlasseObjectgibt eine Zeichenfolge zurück, die aus dem Namen der Klasse, deren Instanz das Objekt ist, dem Vorzeichen "@" und der vorzeichenlosen hexadezimalen Darstellung des Hash-Codes des Objekts besteht. Mit anderen Worten, diese Methode gibt eine Zeichenfolge zurück, die dem Wert von:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Beispiel:
String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());
output:- mystr.toString: [Ljava.lang.String;@13aaa14a
Verwendung der String.toString:
Wann immer Sie den Konstruktor namens value im StringFormular untersuchen müssen, können Sie einfach String.toString... als Beispiel ... verwenden.
package pack1;
import java.util.*;
class Bank {
String n;
String add;
int an;
int bal;
int dep;
public Bank(String n, String add, int an, int bal) {
this.add = add;
this.bal = bal;
this.an = an;
this.n = n;
}
public String toString() {
return "Name of the customer.:" + this.n + ",, "
+ "Address of the customer.:" + this.add + ",, " + "A/c no..:"
+ this.an + ",, " + "Balance in A/c..:" + this.bal;
}
}
public class Demo2 {
public static void main(String[] args) {
List<Bank> l = new LinkedList<Bank>();
Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
l.add(b1);
l.add(b2);
l.add(b3);
l.add(b4);
l.add(b5);
Iterator<Bank> i = l.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
... kopieren Sie dieses Programm in Ihre Eclipse und führen Sie es aus ... Sie erhalten die Ideen zu String.toString...
toStringnicht beabsichtigt und nicht für Benutzeroberflächenzwecke geeignet ist.
toStringein Objekt in der GUI anzeigen? Wenn ich ein umfangreiches Objekt habe und es in einer GUI anzeigen möchte, nein, ich erstelle weder einen zusätzlichen Renderer dafür, noch extrahiere ich eine Zeichenfolgeeigenschaft aus dem Objekt, um diese in der GUI zu verwenden. Ich behalte sie einfach und umsetzbar toString, um all diesen Aufwand umgehen zu können. Wenn Sie dies sauberer tun möchten, erstellen Sie eine Wrapper-Klasse, die für Benutzeroberflächenzwecke vorgesehen ist, und implementieren ihre toStringMethode, um eine Zeichenfolgeeigenschaft des Wrappees zurückzugeben.
Die toString()Methode gibt eine Textdarstellung eines Objekts zurück. Eine grundlegende Implementierung ist bereits enthalten, java.lang.Objectund da alle Objekte davon erben java.lang.Object, ist garantiert, dass jedes Objekt in Java über diese Methode verfügt.
Das Überschreiben der Methode ist immer eine gute Idee, insbesondere beim Debuggen, da Debugger häufig Objekte anhand des Ergebnisses der toString()Methode anzeigen. Verwenden Sie also eine sinnvolle Implementierung, aber verwenden Sie sie für technische Zwecke. Die Anwendungslogik sollte Getter verwenden:
public class Contact {
private String firstName;
private String lastName;
public Contact (String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {return firstName;}
public String getLastName() {return lastName;}
public String getContact() {
return firstName + " " + lastName;
}
@Override
public String toString() {
return "["+getContact()+"]";
}
}
Es kann optional im Kontext einer Anwendung verwendet werden, wird jedoch weitaus häufiger für Debugging-Zwecke verwendet. Wenn Sie beispielsweise einen Haltepunkt in einer IDE erreichen, ist es viel einfacher, aussagekräftige toString()Objekte zu lesen, als deren Mitglieder zu untersuchen.
Es gibt keine festgelegten Anforderungen für die toString()Vorgehensweise einer Methode. Konventionell werden Ihnen meistens der Name der Klasse und der Wert der relevanten Datenelemente angezeigt. Meistens werden toString()Methoden in IDEs automatisch generiert.
toString()Es ist eine schlechte Idee, sich auf eine bestimmte Ausgabe einer Methode zu verlassen oder sie innerhalb eines Programms zu analysieren. Was auch immer Sie tun, gehen Sie diesen Weg nicht.
toString () gibt eine Zeichenfolge / Textdarstellung des Objekts zurück. Die toString () -Methode wird häufig für Diagnosezwecke wie Debuggen, Protokollieren usw. verwendet, um wichtige Details zum Objekt zu lesen.
Es wird automatisch aufgerufen, wenn das Objekt an println, print, printf, String.format (), assert oder den String-Verkettungsoperator übergeben wird.
Die Standardimplementierung von toString () in der Klasse Object gibt eine Zeichenfolge zurück, die aus dem Klassennamen dieses Objekts gefolgt von @ sign und der vorzeichenlosen hexadezimalen Darstellung des Hashcodes dieses Objekts unter Verwendung der folgenden Logik besteht:
getClass().getName() + "@" + Integer.toHexString(hashCode())
Zum Beispiel das Folgende
public final class Coordinates {
private final double x;
private final double y;
public Coordinates(double x, double y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Coordinates coordinates = new Coordinates(1, 2);
System.out.println("Bourne's current location - " + coordinates);
}
}
druckt
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Überschreiben Sie nun toString () in der Coordinates-Klasse wie folgt:
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
führt zu
Bourne's current location - (1.0, 2.0) //concise and informative
Die Nützlichkeit des Überschreibens von toString () wird noch größer, wenn die Methode für Sammlungen aufgerufen wird, die Verweise auf diese Objekte enthalten. Zum Beispiel das Folgende
public static void main(String[] args) {
Coordinates bourneLocation = new Coordinates(90, 0);
Coordinates bondLocation = new Coordinates(45, 90);
Map<String, Coordinates> locations = new HashMap<String, Coordinates>();
locations.put("Jason Bourne", bourneLocation);
locations.put("James Bond", bondLocation);
System.out.println(locations);
}
druckt
{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}
an Stelle von,
{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}
Nur wenige Implementierungszeiger,
Geben Sie Accessoren / Getter für alle Instanzfelder an, die in der zurückgegebenen Zeichenfolge enthalten sind. Zum Beispiel in der Klasse "Koordinaten"
public double getX() {
return x;
}
public double getY() {
return y;
}Eine umfassende Beschreibung der toString () -Methode finden Sie in Punkt 10 des Buches Effective Java ™, Second Edition, von Josh Bloch.
Codierung:
public class Test {
public static void main(String args[]) {
ArrayList<Student> a = new ArrayList<Student>();
a.add(new Student("Steve", 12, "Daniel"));
a.add(new Student("Sachin", 10, "Tendulkar"));
System.out.println(a);
display(a);
}
static void display(ArrayList<Student> stu) {
stu.add(new Student("Yuvi", 12, "Bhajji"));
System.out.println(stu);
}
}
Student.java:
public class Student {
public String name;
public int id;
public String email;
Student() {
}
Student(String name, int id, String email) {
this.name = name;
this.id = id;
this.email = email;
}
public String toString(){ //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
return name+" "+id+" "+email;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email=email;
}
}
Ausgabe:
[Steve 12 Daniel, Sachin 10 Tendulkar]
[Steve 12 Daniel, Sachin 10 Tendulkar, Yuvi 12 Bhajji]
Wenn Sie toString () in der Pojo-Klasse (Student.java) nicht gewohnt sind, erhalten Sie eine Ausgabe wie [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]. Um diese Art von Problemen zu vermeiden, verwenden wir die toString () -Methode.
Wenn Sie in einem String-Kontext auf ein Objekt zugreifen (das kein String ist), wird toString () vom Compiler unter dem Deckmantel aufgerufen.
Deshalb
Map map = new HashMap();
System.out.println("map=" + map);
funktioniert, und indem Sie den Standard toString () von Object in Ihren eigenen Klassen überschreiben, können Sie Ihre Objekte auch in String-Kontexten nützlich machen.
(Und betrachten Sie es als Black Box! Verwenden Sie den Inhalt niemals für etwas anderes als für die Präsentation vor einem Menschen.)
Der Hauptzweck von toString besteht darin, eine String-Darstellung eines Objekts zu generieren. Dies bedeutet, dass der Rückgabewert immer ein String ist. In den meisten Fällen ist dies einfach der Klassen- und Paketname des Objekts, aber in einigen Fällen wie StringBuilder erhalten Sie tatsächlich einen String-Text.
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/
public String toString() {
StringBuffer sb = new StringBuffer();
Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
for (Field field : fields){
try {
field.setAccessible(true);
String key=field.getName();
String value;
try{
value = (String) field.get(this);
} catch (ClassCastException e){
value="";
}
sb.append(key).append(": ").append(value).append("\n");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}
Wenn Sie zuerst Python und dann Java lernen. Ich denke, es spielt die gleiche Rolle wie die __str__()Methode in Python, es ist eine magische Methode wie __dict__()und, __init__()aber um auf eine Zeichenfolge zu verweisen, die das Objekt darstellt.