Java apache commons ToStringBuilder サンプルプログラム
ToStringBuilderの説明(google翻訳)
Object.toString()メソッドの実装を支援します。
このクラスを使用すると、任意のクラスまたはオブジェクトに対して良好で一貫したtoString()を構築できます。このクラスは、次の方法でプロセスを簡素化することを目的としています。
・フィールド名を許可する
・すべての型を一貫して扱う
・一貫してnullを処理する
・出力配列と多次元配列
・オブジェクトとコレクションの詳細レベルを制御できるようにする
・クラス階層を処理するこのクラスの書き込みコードを使用するには、次のようにします。
public class Person {
String name;
int age;
boolean smoker;…
public String toString() {
return new ToStringBuilder(this).
append(“name”, name).
append(“age”, age).
append(“smoker”, smoker).
toString();
}
}Person@7f54[name=Stephen,age=29,smoker=false]という形式のtoStringが生成されます。
スーパークラスtoStringを追加するには、appendSuper(java.lang.String)を使用します。委譲されたオブジェクト(または他のオブジェクト)からtoStringを追加するには、appendToString(java.lang.String)を使用します。
あるいは、リフレクションを使用してテストするフィールドを決定する方法があります。これらのフィールドは通常プライベートなので、reflectionToStringメソッドはAccessibleObject.setAccessibleを使用してフィールドの可視性を変更します。適切な権限が正しく設定されていない限り、セキュリティマネージャの下では失敗します。明示的にテストするよりも遅くなります。
このメソッドの典型的な呼び出しは次のようになります。
public String toString() {
return ToStringBuilder.reflectionToString(this);
}ビルダーを使用して、サードパーティのオブジェクトをデバッグすることもできます。
System.out.println(“An object: ” + ToStringBuilder.reflectionToString(anObject));
toStringの正確な形式は、コンストラクタに渡されるToStringStyleによって決まります。
Object#toStringをオーバーライドする際の補助メソッドになります。
いちいち書くのが面倒なあなた向けのおすすめのソリューションです。
ReflectionToStringBuilderはToStringBuilderを拡張したものになるので、もともと利用している人は、ToStringBuilderを使っていたりします。(私ですが。。。)
今後利用するのは、ReflectionToStringBuilderを利用したほうが良いと思います。
ToStringBuilder
package jp.pjin.tech.java; import java.time.LocalDate; import jp.pjin.tech.java.domain.Elephant; import jp.pjin.tech.java.domain.Fox; public class CommonsExample19 { public static void main(String[] args) throws Exception { Fox f1 = new Fox(); f1.setId(1); f1.setName("なまえなんだよねー"); f1.setCreateAt(LocalDate.now()); Elephant e1 = new Elephant(); e1.setId(1); e1.setName("まーくん"); e1.setMail("elepahtn@pjin.jp"); e1.setPass("111222"); f1.setElephant(e1); System.out.println(f1); } }
Fox
package jp.pjin.tech.java.domain; import java.io.Serializable; import java.time.LocalDate; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; public class Fox implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private Elephant elephant; private LocalDate createAt; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Elephant getElephant() { return elephant; } public void setElephant(Elephant elephant) { this.elephant = elephant; } public LocalDate getCreateAt() { return createAt; } public void setCreateAt(LocalDate createAt) { this.createAt = createAt; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } }
Fox(クラス名にはあまり意味はありません)クラスには、id, name, careteAt, elephantと4つのフィールドがあります。
ここで、FoxはElephantを所有している関係になっていることに注目してください。
また、日付型のフォーマットが気になると思いますので、LocalDateのフィールドも用意しました。