Альтернатива MoreObjects в Java 8
Я хочу избавиться от этой зависимости: 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 ответов
можно использовать StringJoiner
С java.util
пакета.
пример:
@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
+"]";
}
почему бы не построить строку самостоятельно? Код прост в написании и понимании, без использования каких-либо специфических функций 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();
}
просто показывая довольно крутое решение, чтобы IntelliJ идея генерировать toString с StringJoiner:https://gist.github.com/vlastikcz/6a3b5c158bdb7bf6e9fd (Большое спасибо автору)
Добавьте код в шаблоны toString: нажмите Alt+Insert, выберите toString, затем выберите Настройки помимо шаблонов, добавьте со знаком плюс:
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);
}