はじめに
クラスのメンバ変数の値をログに出力する際に、toStringメソッドを実装して各メンバ変数の値を含めてString型の値を返すような実装をしていると思う。
メンバ変数が少ないと楽だが、メンバ変数が多い場合は実装するにも手間がかかる。
そのような場合、ToSTringBuilderクラスを使用するとtoStringメソッドの実装が楽になるのでどのように出力されるのか簡単に試してみる。
ToStringBuilderを試してみる
プリミティブ型のメンバ変数を持つクラス
プリミティブ型のメンバ変数を持つクラスを用意してToStringBuilderを実行してみる。
public class Student {
int student_number = 0;
String firstName = null;
String lastName = null;
int age = 0;
public Student(int number, String firstName, String lastName, int age) {
this.student_number = number;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
}
ToStringBuilderを実行するクラスは以下のように実装。
import org.apache.commons.lang3.builder.ToStringBuilder;
public class Main {
public static void main(String args[]) {
Student student1 = new Student(1, "tanaka", "test", 13);
System.out.println(ToStringBuilder.reflectionToString(student1));
}
}
実行すると以下のように出力された。
Student@7d417077[age=13,firstName=tanaka,lastName=test,student_number=1]
コレクションクラスをメンバ変数を持つ場合はどのように出力されるのか
プリミティブ型ではなく、コレクションクラスをメンバ変数に持つ場合はどのように出力されるのか確認してみる。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Student {
int student_number = 0;
String firstName = null;
String lastName = null;
int age = 0;
List<Integer> historyClass = null;
Map<String, String> committee = null;
public Student(int number, String firstName, String lastName, int age) {
this.student_number = number;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.historyClass = new ArrayList<>();
this.historyClass.add(1);
this.historyClass.add(6);
this.committee = new HashMap<>();
this.committee.put("1", "ikimono");
}
}
出力結果は以下のとおり。
コレクションクラスが保持する値も出力されることがわかる。
Student@7d417077[age=13,committee={1=ikimono},firstName=tanaka,historyClass=[1, 6],lastName=test,student_number=1]
出力フォーマットの変更が可能
ToStringBuilderクラスを使ってメンバ変数を出力する際のフォーマットを指定することが可能。
やり方としては、reflectionToString
メソッドにスタイルをパラメータとして渡すか、事前にsetDefaultStyle(ToStringStyle style)
でスタイルを設定しておく2パターンになる。
出力フォーマットの種類
出力フォーマットはToStringStyleクラスを設定することで変更可能。
種類 | 説明 |
---|---|
DEFAULT_STYLE | デフォルトの出力スタイル。 値をカンマ区切りで出力 |
MULTI_LINE_STYLE | 値を複数行で出力 |
NO_FIELD_NAMES_STYLE | メンバ変数名まで一緒に出力せずに、値だけ出力(クラス名は出力する) |
SHORT_PREFIX_STYLE | オブジェクト情報まで一緒に出力せずに出力 |
SIMPLE_STYLE | 値のみを出力。 |
NO_CLASS_NAME_STYLE | クラス名は出力せずに、メンバ変数名と値を出力 |
JSON_STYLE | JSON形式で出力 |
最後に
ToStringBuilderクラスを活用すれば、toStringメソッドの実装が簡単にできる。
ログにはクラス名まで不要であれば、出力スタイルを変更することで、ログの出力内容の見直しが出来て良いと思った。
今後、ToStringBuilderクラスを活用できたらと思う。