2011-01-21 59 views
15

让我们面对它写好的toString消息是一件无聊的杂乱的事情,需要完成,因为它可以真正有助于在调试器或日志记录中进行检查。什么是你使用或看过的最好的toString构建器类?是什么让它变得美好

你喜欢或想应该是这样的帮手做什么特点?

  • 倾销性质应该来瓦特/标签。

    名= NP国家=澳大利亚...

  • 值是一些默认的应该选择性地跳过。

    • Theres no point打印大量属性为0或null的属性。
    • 如果你设置了一个标签,并且该值为null,那么不要包含任何一个。
  • 标签和值之间的分隔符应该是可更新的,并且它应该在添加时自动插入到标签和值之间。

  • 它也应该自动插入您选择的分隔符。

    如果你想在包含数组的情况下在值之间插入逗号空格,就这样吧。

  • 它应该自动引用字符串值......因为它非常重要,以确切知道字符串开始和结束的位置。

    *名称= NP状态=“新南威尔士”

  • 当列表,地图或设置中加入大约引用串,使用设定的分隔等应该受到尊重的规则。请不要只是转储Collection.toString()。

我在成才其他几个人我很完善,你可以列出自己的想法,意见等

new ToStringBuilder() 
    .setLabelValueSeparator('=') 
    .label("name") 
    .value(Country.AUSTRALIA) // -> returns "Australia" without the quotes. 
    .label("day of death") 
    .value(null) // 
    .label("numbers") 
    .valueSeparator(","); 
    .value(Arrays.asList(1, 2, 3) 
    .build(); 

意志“NAME =”澳大利亚”号当然结果= 1,2 ,3;

回答

9

我只是用我的IDE来生成对我的toString如果我改变了代码,我删除的方法和再生

+1

星爷却产生toStrings吸,他们在Q描述的所有弱点。 – 2011-01-21 09:24:09

20

Apache ToStringBuilder有一个体面的implenentation出b的。牛:

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

我实际上正在寻找如何得到它的输出更漂亮。 ReflectionStringBuilder似乎提供了一些更多的定制。具体来说,我喜欢这样的:

@Override 
public String toString() { 
    StandardToStringStyle style = new StandardToStringStyle(); 
    style.setFieldSeparator(", "); 
    style.setUseClassName(false); 
    style.setUseIdentityHashCode(false); 

    return new ReflectionToStringBuilder(this, style).toString(); 
} 

输出看起来是这样的:

[[email protected], age=16, createdDate=<null>, favoriteColor=blue, id=2] 
相关问题