読者です 読者をやめる 読者になる 読者になる

ToStringBuilder より ToStringHelper の方が見やすい!

Lang - Home の ToStringBuilder をよく使ってましたが、最近 Xtend - Modernized Java の ToStringHelper に乗り換えました。

Xtend だからと言われそうなので Java で書いてみました。

import java.util.Date;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.eclipse.xtext.xbase.lib.util.ToStringHelper;

public class Main {
  public static void main(String... args) {
    ToStringBuilderData builder = new ToStringBuilderData(
      1, "あいうえお", new Date());

    System.out.println("ネストがnull");
    System.out.println(builder);
    builder.generateNest();
    System.out.println("ネストがnot null");
    System.out.println(builder);

    ToStringHelperData helper = new ToStringHelperData(
      1, "あいうえお", new Date());

    System.out.println("ネストがnull");
    System.out.println(helper);
    helper.generateNest();
    System.out.println("ネストがnot null");
    System.out.println(helper);  
  }
}

class ToStringBuilderData {
  private int id;
  private String name;
  private Date date;
  private ToStringBuilderData nest;

  public ToStringBuilderData(int id, String name, Date date) {
    this.id = id;
    this.name = name;
    this.date = date;
  }

  public void generateNest() {
    nest = new ToStringBuilderData(id, name, date);
  }

  @Override
  public String toString() {
    return ToStringBuilder.reflectionToString(this,
        ToStringStyle.MULTI_LINE_STYLE);
  }
}

class ToStringHelperData {
  private int id;
  private String name;
  private Date date;
  private ToStringHelperData nest;

  public ToStringHelperData(int id, String name, Date date) {
    this.id = id;
    this.name = name;
    this.date = date;
  }

  public void generateNest() {
    nest = new ToStringHelperData(id, name, date);
  }

  @Override
  public String toString() {
    return new ToStringHelper().toString(this);
  }
}

実行結果

ネストがnull
xtendjunit.ToStringBuilderData@2cf0a755[
  id=1
  name=あいうえお
  date=Mon Feb 03 21:10:50 JST 2014
  nest=<null>
]
ネストがnot null
xtendjunit.ToStringBuilderData@2cf0a755[
  id=1
  name=あいうえお
  date=Mon Feb 03 21:10:50 JST 2014
  nest=xtendjunit.ToStringBuilderData@192277ed[
  id=1
  name=あいうえお
  date=Mon Feb 03 21:10:50 JST 2014
  nest=<null>
]
]
ネストがnull
ToStringHelperData [
  id = 1
  name = "あいうえお"
  date = Mon Feb 03 21:10:50 JST 2014
  nest = null
]
ネストがnot null
ToStringHelperData [
  id = 1
  name = "あいうえお"
  date = Mon Feb 03 21:10:50 JST 2014
  nest = ToStringHelperData [
    id = 1
    name = "あいうえお"
    date = Mon Feb 03 21:10:50 JST 2014
    nest = null
  ]
]

ToStringBuilder でも、ToStringStyle.MULTI_LINE_STYLE を指定すると良い感じなんですが、ネストした場合にイマイチ。。