JavaRush /Java-Blog /Random-DE /So überschreiben Sie die ToString()-Methode effektiv mit ...
dio
Level 16
Москва

So überschreiben Sie die ToString()-Methode effektiv mit ToStringBuilder.

Veröffentlicht in der Gruppe Random-DE
ToStringBuilder ist eine Hilfsklasse, die von der Apache Commons Lang- Bibliothek bereitgestellt wird . ToStringBuilder ist eine Dienstprogrammklasse, die von den Apache Commons Lang-Bibliotheken bereitgestellt wird. Es bietet eine vollständige und bessere Kontrolle darüber, welche Objektdaten und wie viele von der toString()-Methode ausgegeben werden sollen und in welchem ​​Format. ToStringBuilder hilft Ihnen, das Schreiben von viel Code zu vermeiden, indem es die Notwendigkeit beseitigt, die ToString()-Methode in untergeordneten Klassen zu überschreiben. ToStringBuilder kann verwendet werden, um eine Art Vorlage zu erstellen, um die bereitgestellten Funktionen voll auszunutzen. Um Commons-Lang in Ihr Projekt einzubinden, fügen Sie die folgenden Abhängigkeiten zu Ihrer Maven-Konfigurationsdatei hinzu. In diesem Artikel werde ich einige Beispielverwendungsbeispiele geben, die als Best Practices zum Überschreiben der ToString()-Methode in den Klassen Ihrer nächsten Anwendung angesehen werden können. Um die verschiedenen Möglichkeiten der Verwendung von ToStringBuilder zum Erstellen der toString()-Methode in verschiedenen Szenarien zu demonstrieren, werde ich drei Modelle erstellen: AbstractUser.java, WebUser.java und GuestUser.java. commons-lang commons-lang 2.5
AbstractUser.java
package com.howtodoinjava.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import com.howtodoinjava.style.CustomToStringStyle; public abstract class AbstractUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String firstName; private String lastName; private String age; //Setterss and getters }
WebUser.java
public class WebUser extends AbstractUser { private static final long serialVersionUID = 1L; private Date lastLoggedIn; public Date getLastLoggedIn() { return lastLoggedIn; } public void setLastLoggedIn(Date lastLoggedIn) { this.lastLoggedIn = lastLoggedIn; } }
GuestUser.java
public class GuestUser extends WebUser { private static final long serialVersionUID = 1L; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
Verschiedene Anwendungsfälle
1) Die toString()-Methode in der Superklasse wird von allen untergeordneten Klassen verwendet.
Sie können die toString()-Methode in der Objektklasse der obersten Ebene überschreiben, d. h. in unserem Fall AbstractUser.java. Diese Methode wird von allen untergeordneten Klassen verwendet, es sei denn, sie enthalten ihre eigene Version der toString()-Methode. @Override public String toString() { return ToStringBuilder.reflectionToString(this); } Die obige ToString()-Methode ist in der Lage, alle verfügbaren Informationen über die aktuelle Klasse bereitzustellen. Sie funktioniert auch in Unterklassen, es sei denn, die Unterklasse überschreibt die ToString()-Methode. package com.howtodoinjava; import java.util.Date; import com.howtodoinjava.model.GuestUser; import com.howtodoinjava.model.WebUser; public class ToStringDemoUsage { public static void main(String[] args) { GuestUser guest = getGuestUser(); System.out.println(guest); } public static GuestUser getGuestUser() { GuestUser user = new GuestUser(); user.setId(100); user.setFirstName("Lokesh"); user.setLastName("Gupta"); user.setAge("30"); user.setLastLoggedIn(new Date()); user.setLocation("New Delhi"); return user; } } Output: com.howtodoinjava.model.GuestUser@d1f24bb[location=New Delhi,lastLoggedIn=Mon Jun 03 13:31:05 IST 2013,id=100,firstName=Lokesh,lastName=Gupta,age=30]
2) Benutzerdefinierte Formatierung jeglicher Art, z. B. Daten
Sie können auf jedes Feld in der ToString-Methode ein benutzerdefiniertes Format anwenden. Ein Beispiel für eine benutzerdefinierte Formatierung ist unten dargestellt: package com.howtodoinjava.style; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.builder.ToStringStyle; public class CustomToStringStyle extends ToStringStyle { private static final long serialVersionUID = 1L; protected void appendDetail(StringBuffer buffer, String fieldName, Object value) { if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd").format(value); } buffer.append(value); } } Um die Formatierung zu verwenden, platzieren Sie sie in einer Methode wie dieser: @Override public String toString() { return ToStringBuilder.reflectionToString(this, new CustomToStringStyle()); } Output: com.howtodoinjava.model.GuestUser@7910769b[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30]
3) Verwenden Sie Informationen aus der Superklasse in der Unterklasse mit einem einfachen Methodenaufruf
Wenn Sie ToString() in einer untergeordneten Klasse überschreiben möchten, um etwas zu den von der Superklasse empfangenen Informationen hinzuzufügen, gehen Sie folgendermaßen vor: public class WebUser extends AbstractUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("lastLoggedIn", lastLoggedIn).toString(); } } Output: com.howtodoinjava.model.GuestUser@22aed3a5[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30,CustomMessage=I have been added additionally]
4) Nutzung von Informationen nur bis zu einer bestimmten Ebene der Vererbungshierarchie
Angenommen, Sie müssen in einer untergeordneten Klasse die Felder aller Superklassen erweitern. Sie können Informationen bis zu einer bestimmten Ebene der Vererbungshierarchie auf folgende Weise einbeziehen: public class GuestUser extends WebUser { @Override public String toString() { return ToStringBuilder.reflectionToString(this,new CustomToStringStyle(),true,WebUser.class); } } Output: com.howtodoinjava.model.GuestUser@18dd7404[location=New Delhi,lastLoggedIn=2013-06-03]
5) Zeigen Sie nur die gewünschten Informationen an
Manchmal möchten Sie nicht alle Felder einer Klasse in die ToString()-Methode einschließen. Dann können Sie es so machen: public abstract class AbstractUser implements Serializable { //Other code @Override public String toString() { return new ToStringBuilder(this) .append("firstName", firstName) .append("lastName", lastName) .append("age", age).toString(); } } public class GuestUser extends WebUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("location", location).toString(); } } Output: com.howtodoinjava.model.GuestUser@6483dae1[firstName=Lokesh,lastName=Gupta,age=30,location=New Delhi] Den Quellcode der obigen Beispiele können Sie über diesen Link herunterladen. Quelle herunterladen Originalartikel: So überschreiben Sie toString() effektiv mit ToStringBuilder Translated
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION