JavaRush /Blog Java /Random-PL /Jak skutecznie zastąpić metodę ToString() za pomocą ToStr...
dio
Poziom 16
Москва

Jak skutecznie zastąpić metodę ToString() za pomocą ToStringBuilder.

Opublikowano w grupie Random-PL
ToStringBuilder jest klasą pomocniczą udostępnianą przez bibliotekę Apache Commons Lang . ToStringBuilder to klasa narzędziowa dostarczana przez biblioteki Apache Commons Lang. Zapewnia pełną i lepszą kontrolę nad tym, jakie dane obiektowe i ile powinna wyprowadzić metoda toString(), a także w jakim formacie. ToStringBuilder pomaga uniknąć pisania dużej ilości kodu, eliminując potrzebę zastępowania metody ToString() w klasach podrzędnych. ToStringBuilder można wykorzystać do utworzenia pewnego rodzaju szablonu, aby w pełni wykorzystać możliwości, jakie zapewnia. Aby uwzględnić Commons-Lang w swoim projekcie, dodaj następujące zależności do pliku konfiguracyjnego Maven. W tym artykule podam kilka przykładowych przykładów użycia, które można uznać za najlepsze praktyki zastępowania metody ToString() w klasach następnej aplikacji. Aby zademonstrować różne możliwości wykorzystania ToStringBuilder do budowy metody toString() w różnych scenariuszach, utworzę trzy modele: AbstractUser.java, WebUser.java i GuestUser.java. commons-lang commons-lang 2.5
StreszczenieUżytkownik.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 }
Użytkownik sieciowy.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; } }
Różne przypadki użycia
1) metoda toString() w superklasie jest używana przez wszystkie klasy potomne.
Metodę toString() można zastąpić w klasie obiektu najwyższego poziomu, tj. w naszym przypadku AbstractUser.java. Ta metoda jest używana przez wszystkie klasy podrzędne, chyba że zawierają one własną wersję metody toString(). @Override public String toString() { return ToStringBuilder.reflectionToString(this); } Powyższa metoda ToString() jest w stanie podać wszystkie dostępne informacje o aktualnej klasie, będzie działać także w podklasach, chyba że podklasa zastąpi metodę 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) Niestandardowe formatowanie dowolnego typu, np. Dane
Możesz zastosować niestandardowy format do dowolnego pola w metodzie ToString. Przykład niestandardowego formatowania pokazano poniżej: 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); } } Aby użyć formatowania, umieść je w metodzie takiej jak ta: @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) Wykorzystaj informacje z superklasy w podklasie za pomocą łatwego wywołania metody
Jeśli chcesz zastąpić ToString() w klasie podrzędnej, aby dodać coś do informacji otrzymanych z superklasy, zrób to w ten sposób: 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) Wykorzystanie informacji tylko do pewnego poziomu hierarchii dziedziczenia
Załóżmy, że w jakiejś klasie potomnej chcesz rozszerzyć pola wszystkich superklas, możesz zawrzeć informacje aż do pewnego poziomu hierarchii dziedziczenia w następujący sposób: 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) Wyświetlaj tylko te informacje, które chcesz
Czasami nie chcesz uwzględniać wszystkich pól klasy w metodzie ToString(). Następnie możesz to zrobić w ten sposób: 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] Możesz pobrać kod źródłowy powyższych przykładów z tego linku. Pobierz źródło Oryginalny artykuł: Jak skutecznie zastąpić toString() za pomocą ToStringBuilder Translated
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION