JavaRush /Java Blog /Random-JA /ToStringBuilder を使用して ToString() メソッドを効果的にオーバーライドする方法。
dio
レベル 16
Москва

ToStringBuilder を使用して ToString() メソッドを効果的にオーバーライドする方法。

Random-JA グループに公開済み
ToStringBuilder は、 Apache commons langライブラリによって提供されるヘルパー クラスです。ToStringBuilder は、Apache Commons Lang ライブラリによって提供されるユーティリティ クラスです。これにより、toString() メソッドによってどのオブジェクト データをどれだけ出力するか、またどの形式で出力するかを完全かつ適切に制御できます。 ToStringBuilder を使用すると、子クラスで ToString() メソッドをオーバーライドする必要がなくなるため、大量のコードの作成を回避できます。ToStringBuilder を使用すると、それが提供する機能を最大限に活用するためのテンプレートを作成できます。Commons-Lang をプロジェクトに含めるには、次の依存関係を Maven 構成ファイルに追加します。 この記事では、次のアプリケーションのクラスで ToString() メソッドをオーバーライドするための ベスト プラクティス と考えられる使用例をいくつか示します。さまざまなシナリオで ToStringBuilder を使用して toString() メソッドを構築するさまざまな可能性を示すために、AbstractUser.java、WebUser.java、および GuestUser.java の 3 つのモデルを作成します。 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; } }
ゲストユーザー.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] 上記の例のソース コードは、このリンクからダウンロードできます。 ソースをダウンロード 元の記事: ToStringBuilder で toString() を効果的にオーバーライドする方法
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION