JavaRush /Java Blog /Random-TW /如何使用 ToStringBuilder 有效地重寫 ToString() 方法。
dio
等級 16
Москва

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

在 Random-TW 群組發布
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