JavaRush /Java 博客 /Random-ZH /如何使用 ToStringBuilder 有效地重写 ToString() 方法。
dio
第 16 级
Москва

如何使用 ToStringBuilder 有效地重写 ToString() 方法。

已在 Random-ZH 群组中发布
ToStringBuilder是apache commons lang库提供的帮助程序类。ToStringBuilder 是 Apache Commons Lang 库提供的实用程序类。它提供了对 toString() 方法应输出哪些对象数据、多少以及以何种格式输出的完整且更好的控制。 ToStringBuilder 无需在子类中重写 ToString() 方法,从而帮助您避免编写大量代码。ToStringBuilder 可用于创建各种模板,以充分利用它提供的功能。要将 Commons-Lang 包含在您的项目中,请将以下依赖项添加到您的 Maven 配置文件中。 在本文中,我将提供一些示例用法示例,这些示例可被视为在下一个应用程序的类中重写 ToString() 方法的 最佳实践。为了演示在不同场景下使用 ToStringBuilder 构建 toString() 方法的不同可能性,我将创建三个模型:AbstractUser.java、WebUser.java 和 GuestUser.java。 commons-lang commons-lang 2.5
抽象用户.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; } }
访客用户.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; } }
各种用例
1)超类中的toString()方法被所有子类使用。
您可以重写顶级对象类中的 toString() 方法,即 在我们的例子中 AbstractUser.java。所有子类都使用此方法,除非它们包含自己的 toString() 方法版本。 @Override public String toString() { return ToStringBuilder.reflectionToString(this); } 上面的 ToString() 方法能够提供有关当前类的所有可用信息,它也适用于子类,除非子类重写 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) 任何类型的自定义格式,例如数据
您可以将自定义格式应用于 ToString 方法中的任何字段。自定义格式的示例如下所示: 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); } } 要使用格式,请将其放置在如下方法中: @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)通过简单的方法调用在子类中使用来自超类的信息
如果您想在子类中重写 ToString() 以向从超类接收到的信息添加某些内容,请按如下操作: 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) 信息的使用仅达到继承层次结构的某个级别
假设在某个子类中您需要扩展所有超类的字段,您可以通过以下方式将信息包含到继承层次结构的某个级别: 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)只显示你想要的信息
有时您不想在 ToString() 方法中包含类的所有字段。然后你可以这样做: 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] 你可以从此链接下载上述示例的源代码。 下载源码 原文: How to override toString() effective with ToStringBuilder 翻译
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION