让我们面对它编写好的toString消息是一件无聊的杂乱的工作,需要完成,因为它对调试器或日志记录中的检查真的有用。
你喜欢或希望在这样的帮助下有什么功能......
转储属性应带有标签。
name = mP country = Australia ...
应该可以选择跳过某些默认值。
标签和值之间的分隔符应该是可更新的,并且在添加标签和值时应自动插入它们之间。
它还应该自动插入您选择的分隔符。
如果你想在包含一个数组时让逗号在值之间留出空格,那就这样吧。
它应该自动引用字符串值...因为知道字符串开始和结束的确切位置非常重要。
* name = mP state =“新南威尔士”
当添加列表,地图或集合时,应该遵守有关引用字符串的规则,使用set separator等。请不要只转储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 =”Australia“number = 1,2,3;
答案 0 :(得分:20)
Apache ToStringBuilder有一个很好的开箱即用的实施方案:
@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=foo@gmail.com, age=16, createdDate=<null>, favoriteColor=blue, id=2]
答案 1 :(得分:9)
我只是使用我的IDE为我生成toString。如果我更改了代码,我会删除该方法并重新生成。