代码之家  ›  专栏  ›  技术社区  ›  Costin

Java 8中MoreObjects的替代方案

  •  9
  • Costin  · 技术社区  · 9 年前

    我想摆脱这种依赖: import com.google.common.base.MoreObjects;

    是否有任何简单和/或优雅的方式来重写以下内容 toString() 函数使用Java 8本机函数?

    @Override
    public String toString() {
      return MoreObjects
        .toStringHelper(this)
        .add("userId", this.userId)
        .add("timestamp", this.timestamp)
        .toString();
    }
    
    5 回复  |  直到 9 年前
        1
  •  31
  •   Tagir Valeev    9 年前

    您可以使用 StringJoiner 从…起 java.util 包裹

    例子:

    @Override
    public String toString() {
        return new StringJoiner(", ", ClassName.class.getSimpleName() + "[", "]")
        .add("userId=" + userId)
        .add("timestamp=" + timestamp)
        .toString();
    }
    
        2
  •  7
  •   Lii bob    5 年前

    我看不出有什么理由用这个 toStringHelper 甚至早于Java 8。简单的实现不再是:

    @Override
    public String toString() {
        return getClass().getSimpleName()+"["
              +"userId: "+this.userId+", "
              +"timestamp: "+this.timestamp
              +"]";
    }
    
        3
  •  4
  •   Tunaki    9 年前

    为什么不自己构建字符串?该代码易于编写和理解,不使用任何Java 8特有的特性。

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName()).append('{')
        sb.append("userId=").append(userId);
        sb.append(", timestamp=").append(timestamp);
        return sb.append('}').toString();
    }
    
        4
  •  3
  •   monami    7 年前

    只是提供了一个非常酷的解决方案,让IntelliJ Idea使用StringJoiner生成toString: https://gist.github.com/vlastikcz/6a3b5c158bdb7bf6e9fd (非常感谢作者)
    将代码添加到字符串模板:按Alt+Insert,选择toString,然后选择templates旁边的Settings,用加号添加: enter image description here

        5
  •  0
  •   tkruse    6 年前

    如果依赖关系正常,Apache commons-lang3有ToString助手:

    @Override
    public String toString() {
        return new ToStringBuilder(this).
        append("name", name).
        append("age", age).
        append("smoker", smoker).
        toString();
    }
    
    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
    

    看见 https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/package-summary.html