JavaRush /Java Blog /Random-IT /Come eseguire l'override efficace del metodo ToString() u...
dio
Livello 16
Москва

Come eseguire l'override efficace del metodo ToString() utilizzando ToStringBuilder.

Pubblicato nel gruppo Random-IT
ToStringBuilder è una classe helper fornita dalla libreria apache commons lang . ToStringBuilder è una classe di utilità fornita dalle librerie Apache Commons Lang. Fornisce un controllo completo e migliore su quali dati dell'oggetto e quanti dati dovrebbero essere emessi dal metodo toString(), nonché in quale formato. ToStringBuilder ti aiuta a evitare di scrivere molto codice eliminando la necessità di sovrascrivere il metodo ToString() nelle classi figlie. ToStringBuilder può essere utilizzato per creare una sorta di modello per sfruttare appieno le funzionalità fornite. Per includere Commons-Lang nel tuo progetto, aggiungi le seguenti dipendenze al file di configurazione Maven. In questo articolo fornirò alcuni esempi di utilizzo di esempio che possono essere considerati come procedure consigliate per eseguire l'override del metodo ToString() nelle classi della prossima applicazione. Per dimostrare le diverse possibilità di utilizzo di ToStringBuilder per creare il metodo toString() in diversi scenari, creerò tre modelli: AbstractUser.java, WebUser.java e 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 }
UtenteWeb.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; } }
Utenteospite.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; } }
Vari casi d'uso
1) il metodo toString() nella super classe viene utilizzato da tutte le classi figlie.
Puoi sovrascrivere il metodo toString() nella classe di oggetti di livello superiore, ad es. nel nostro caso AbstractUser.java. Questo metodo viene utilizzato da tutte le classi figlie a meno che non contengano la propria versione del metodo toString(). @Override public String toString() { return ToStringBuilder.reflectionToString(this); } Il metodo ToString() riportato sopra è in grado di fornire tutte le informazioni disponibili sulla classe corrente, funzionerà anche nelle sottoclassi a meno che la sottoclasse non sovrascriva il metodo ToString(). 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) Formattazione personalizzata di qualsiasi tipo, come Dati
È possibile applicare un formato personalizzato a qualsiasi campo nel metodo ToString. Di seguito è riportato un esempio di formattazione personalizzata: 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); } } Per utilizzare la formattazione, inserirla in un metodo come questo: @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) Utilizza le informazioni della superclasse nella sottoclasse con una semplice chiamata al metodo
Se vuoi sovrascrivere ToString() in una classe figlia per aggiungere qualcosa alle informazioni ricevute dalla super classe, fallo in questo modo: 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) Utilizzo delle informazioni solo fino ad un certo livello della gerarchia ereditaria
Supponiamo che in alcune classi figlie sia necessario espandere i campi di tutte le superclassi, è possibile includere informazioni fino a un certo livello della gerarchia di ereditarietà nel modo seguente: 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) Visualizza solo le informazioni che desideri
A volte non vuoi includere tutti i campi di una classe nel metodo ToString(). Quindi puoi farlo in questo modo: 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] puoi scaricare il codice sorgente degli esempi sopra da questo link. Scarica la fonte Articolo originale: Come sovrascrivere toString() in modo efficace con ToStringBuilder Translated
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION