DTOやらentiryの変数内容を全部まとめて表示する
引き続きcommons勉強中。
Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集
パフォーマンスはよろしくないらしいが、commonsのReflectionToStringクラスという方がおられ、全変数名と値を返してくれるとのこと。
↓こんな感じでtoStringを実装する。(Human.java)
import org.apache.commons.lang.builder.ReflectionToStringBuilder; /** * ある一人の情報をもつエンティティ. * @author enokitech * */ public class Human { /** 氏名 */ private String name; /** 年齢 */ private int age; /** 身長 */ private double height; // コンストラクタ public Human(String name, int age, double height) { this.name = name; this.age = age; this.height = height; } // Setter,Getter public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } // Object.toStringをオーバーライド @Override public String toString() { return ReflectionToStringBuilder.toString(this); } }
メインから呼び出してみる。(MyTest.java)
public class MyTest { public static void main(String[] args) { Human human = new Human("Enoki", 25, 180.0); // 内容の表示 System.out.println(human.toString()); } }
実行結果
Human@1a758cb[name=Enoki,age=25,height=180.0]
こんなかんじで変数名と値が全部出力される。デバッグに便利。
コードは読んでないので仕組みはよくわかんないのですが、java.lang.Class.getDeclaredFields()というのでフィールドと値が取得できるので、その辺のを使ってるのかな?
ただgetDeclaredFieldsをそのまま使うと、設定によってはprivateメンバはセキュリティ上の制約で表示不可なので、全然違うのかも。