您使用或看到的最好的String构建器类是什么?是什么让它变得美好[关闭]

2022-09-02 20:53:16

让我们面对现实,编写漂亮的toString消息是一个无聊的混乱的苦差事,需要完成,因为它确实有助于调试器或日志记录中的插入。

你喜欢或希望在这样的助手中应该有什么功能......

  • 转储属性应带有标签。

    名称=mP国家=澳大利亚...

  • 应选择性地跳过某些默认值的值。

    • 打印大量 0 或 null 的属性是没有意义的。
    • 如果设置了标签,但值为 null,则不要包含任何值。
  • 标签和值之间的分隔符应该是可更新的,并且在添加标签和值时应自动插入标签和值之间。

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

    如果你在包含数组时想要逗号空格,那么就这样吧。

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

    *名称=mP州=“新南威尔士州”

  • 当添加列表,映射或集合时,应遵守有关引用字符串,使用集合分隔符等的规则。请不要只是转储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“数字=1, 2, 3;


答案 1

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]

答案 2

我只是使用我的IDE为我生成toString。如果我更改代码,我将删除该方法并重新生成。


推荐