在 Java 8 中替代 MoreObjects
Alternative to MoreObjects in Java 8
我想摆脱这种依赖:import com.google.common.base.MoreObjects;
是否有任何简单的and/or优雅的方法来使用Java 8 个本机函数重写以下toString()
函数?
@Override
public String toString() {
return MoreObjects
.toStringHelper(this)
.add("userId", this.userId)
.add("timestamp", this.timestamp)
.toString();
}
为什么不自己构建字符串?代码易于编写和理解,无需使用任何 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();
}
您可以使用 java.util
包中的 StringJoiner
。
示例:
@Override
public String toString() {
return new StringJoiner(", ", ClassName.class.getSimpleName() + "[", "]")
.add("userId=" + userId)
.add("timestamp=" + timestamp)
.toString();
}
我看不出有任何理由使用这个 toStringHelper
甚至在 Java 之前 8. 简单的实现不再:
@Override
public String toString() {
return getClass().getSimpleName()+"["
+"userId: "+this.userId+", "
+"timestamp: "+this.timestamp
+"]";
}
只是提供了一个非常酷的解决方案,让 IntelliJ Idea 使用 StringJoiner 生成 toString:https://gist.github.com/vlastikcz/6a3b5c158bdb7bf6e9fd(非常感谢作者)
将代码添加到toString模板中:按Alt+Insert,select toString,然后select Settings besides Templates,加上加号:
如果依赖关系正常,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);
}
我想摆脱这种依赖:import com.google.common.base.MoreObjects;
是否有任何简单的and/or优雅的方法来使用Java 8 个本机函数重写以下toString()
函数?
@Override
public String toString() {
return MoreObjects
.toStringHelper(this)
.add("userId", this.userId)
.add("timestamp", this.timestamp)
.toString();
}
为什么不自己构建字符串?代码易于编写和理解,无需使用任何 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();
}
您可以使用 java.util
包中的 StringJoiner
。
示例:
@Override
public String toString() {
return new StringJoiner(", ", ClassName.class.getSimpleName() + "[", "]")
.add("userId=" + userId)
.add("timestamp=" + timestamp)
.toString();
}
我看不出有任何理由使用这个 toStringHelper
甚至在 Java 之前 8. 简单的实现不再:
@Override
public String toString() {
return getClass().getSimpleName()+"["
+"userId: "+this.userId+", "
+"timestamp: "+this.timestamp
+"]";
}
只是提供了一个非常酷的解决方案,让 IntelliJ Idea 使用 StringJoiner 生成 toString:https://gist.github.com/vlastikcz/6a3b5c158bdb7bf6e9fd(非常感谢作者)
将代码添加到toString模板中:按Alt+Insert,select toString,然后select Settings besides Templates,加上加号:
如果依赖关系正常,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);
}