Альтернатива 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, затем выберите Настройки помимо шаблонов, добавьте со знаком плюс: enter image description here


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