JavaRush /Blogue Java /Random-PT /Como substituir efetivamente o método ToString() usando T...
dio
Nível 16
Москва

Como substituir efetivamente o método ToString() usando ToStringBuilder.

Publicado no grupo Random-PT
ToStringBuilder é uma classe auxiliar fornecida pela biblioteca Apache Commons Lang . ToStringBuilder é uma classe utilitária fornecida pelas bibliotecas Apache Commons Lang. Ele fornece controle completo e melhor sobre quais dados do objeto e quanto devem ser gerados pelo método toString(), bem como em qual formato. ToStringBuilder ajuda a evitar escrever muito código, eliminando a necessidade de substituir o método ToString() em classes filhas. ToStringBuilder pode ser usado para criar uma espécie de modelo para aproveitar ao máximo os recursos que ele oferece. Para incluir Commons-Lang em seu projeto, adicione as seguintes dependências ao arquivo de configuração do Maven. Neste artigo, darei alguns exemplos de uso que podem ser considerados como práticas recomendadas para substituir o método ToString() nas classes de sua próxima aplicação. Para demonstrar as diferentes possibilidades de utilização do ToStringBuilder para construir o método toString() em diferentes cenários, irei criar três modelos: 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 }
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; } }
Vários casos de uso
1) o método toString() na superclasse é usado por todas as classes filhas.
Você pode substituir o método toString() na classe de objeto de nível superior, ou seja, no nosso caso AbstractUser.java. Este método é usado por todas as classes filhas, a menos que contenham sua própria versão do método toString(). @Override public String toString() { return ToStringBuilder.reflectionToString(this); } O método ToString() acima é capaz de fornecer todas as informações disponíveis sobre a classe atual, mas também funcionará em subclasses, a menos que a subclasse substitua o 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) Formatação personalizada de qualquer tipo, como Dados
Você pode aplicar um formato personalizado a qualquer campo do método ToString. Um exemplo de formatação personalizada é mostrado abaixo: 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 a formatação, coloque-a em um 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) Use informações da superclasse na subclasse com chamada de método fácil
Se você quiser sobrescrever ToString() em uma classe filha para adicionar algo às informações recebidas da superclasse, faça assim: 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 informações apenas até um determinado nível da hierarquia de herança
Suponha que em alguma classe filha você precise expandir os campos de todas as superclasses, você pode incluir informações até um determinado nível da hierarquia de herança da seguinte forma: 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) Exiba apenas as informações que você deseja
Às vezes você não deseja incluir todos os campos de uma classe no método ToString(). Então você pode fazer assim: 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] Você pode baixar o código-fonte dos exemplos acima neste link. Fonte de download Artigo original: Como substituir toString() efetivamente com ToStringBuilder Traduzido
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION