JavaRush /Blog Java /Random-ES /Cómo anular efectivamente el método ToString() usando ToS...
dio
Nivel 16
Москва

Cómo anular efectivamente el método ToString() usando ToStringBuilder.

Publicado en el grupo Random-ES
ToStringBuilder es una clase auxiliar proporcionada por la biblioteca de idiomas Apache Commons . ToStringBuilder es una clase de utilidad proporcionada por las bibliotecas Apache Commons Lang. Proporciona un control completo y mejor sobre qué datos de objeto y cuántos deben generarse mediante el método toString(), así como en qué formato. ToStringBuilder le ayuda a evitar escribir mucho código al eliminar la necesidad de anular el método ToString() en las clases secundarias. ToStringBuilder se puede utilizar para crear una especie de plantilla para aprovechar al máximo las capacidades que proporciona. Para incluir Commons-Lang en su proyecto, agregue las siguientes dependencias a su archivo de configuración de Maven. En este artículo, daré algunos ejemplos de uso que pueden considerarse como mejores prácticas para anular el método ToString() en las clases de su próxima aplicación. Para demostrar las diferentes posibilidades de usar ToStringBuilder para construir el método toString() en diferentes escenarios, crearé tres modelos: AbstractUser.java, WebUser.java y GuestUser.java. commons-lang commons-lang 2.5
ResumenUsuario.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 }
Usuario Web.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; } }
UsuarioInvitado.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; } }
Varios casos de uso
1) todas las clases secundarias utilizan el método toString() de la superclase.
Puede anular el método toString() en la clase de objeto de nivel superior, es decir. en nuestro caso AbstractUser.java. Este método lo utilizan todas las clases secundarias a menos que contengan su propia versión del método toString(). @Override public String toString() { return ToStringBuilder.reflectionToString(this); } El método ToString() anterior es capaz de proporcionar toda la información disponible sobre la clase actual; también funcionará en subclases a menos que la subclase anule el método 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) Formato personalizado de cualquier tipo, como Datos
Puede aplicar un formato personalizado a cualquier campo del método ToString. A continuación se muestra un ejemplo de formato personalizado: 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); } } Para usar el formato, colóquelo en un método como este: @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) Utilice información de la superclase en la subclase con una sencilla llamada al método
Si desea anular ToString() en una clase secundaria para agregar algo a la información recibida de la superclase, hágalo así: 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) Uso de información solo hasta un cierto nivel de la jerarquía de herencia
Supongamos que en alguna clase hija necesitas expandir los campos de todas las superclases, puedes incluir información hasta un cierto nivel de la jerarquía de herencia de la siguiente manera: 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) Muestra solo la información que deseas
A veces no deseas incluir todos los campos de una clase en el método ToString(). Entonces puedes hacerlo así: 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] Puedes descargar el código fuente de los ejemplos anteriores desde este enlace. Descargar fuente Artículo original: Cómo anular toString() de manera efectiva con ToStringBuilder Traducido
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION