我想摆脱这种依赖:import com.google.common.base.MoreObjects;
是否有任何简单和/或优雅的方法可以使用Java 8本机函数重写以下toString()
函数?
@Override
public String toString() {
return MoreObjects
.toStringHelper(this)
.add("userId", this.userId)
.add("timestamp", this.timestamp)
.toString();
}
答案 0 :(得分:26)
您可以使用java.util
包中的StringJoiner
。
示例:
@Override
public String toString() {
return new StringJoiner(", ", ClassName.class.getSimpleName() + "[", "]")
.add("userId=" + userId)
.add("timestamp=" + timestamp)
.toString();
}
答案 1 :(得分:4)
为什么不自己构建String?代码易于编写和理解,无需使用任何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();
}
答案 2 :(得分:4)
即使在Java-8之前,我也没有理由使用此toStringHelper
。简单的实现不再是:
@Override
public String toString() {
return getClass().getSimpleName()+"["
+"userId: "+this.userId+", "
+"timestamp: "+this.timestamp
+"]";
}
答案 3 :(得分:2)
只是提供了一个非常酷的解决方案,让IntelliJ Idea使用StringJoiner生成toString:https://gist.github.com/vlastikcz/6a3b5c158bdb7bf6e9fd(非常感谢作者)
将代码添加到toString模板:按Alt + Insert,选择toString,然后选择除模板之外的设置,使用加号添加:
答案 4 :(得分:0)
如果依赖项正常,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);
}