Java Effective Essentials — toString()


Всегда перезаписывайте toString

Это серия, основанная на понимании тем, связанных с книгой, с упором на аннотацию.

Справочная информация

Метод toString является одним из методов, унаследованных от класса Objectc.
Реализация этого метода в классе Object выглядит следующим образом:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Это имя класса, за которым следует @ и беззнаковое шестнадцатеричное значение хэш-кода.

Почему

Почему мы должны заботиться об этом? Подумайте об этом, если бы мы использовали реализацию по умолчанию, которая печатает объект как :

br.com.conta.Usuario@c712a7ee
Войдите в полноэкранный режим Выход из полноэкранного режима

Как визуализация этого в журнале поможет вам эффективно отлаживать код?
Было бы гораздо лучше просматривать данные, которые действительно идентифицируют объект, не так ли?

Пример

@Override
public String toString() {
    return "Usuario{" +
            "nome='" + nome + ''' +
            ", email='" + email + ''' +
            ", nascimento=" + nascimento +
            '}';
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Выше мы переписали toString класса User, чтобы он имел аннотацию @Override.
Посмотрите, насколько более читабельным он стал, и если вы зарегистрируете объект в журнале, мы получим данные в следующем формате:

Usuario{nome='Ana dos Santos', email='anasantos10@gmail.com', nascimento=1977-08-15}
Войдите в полноэкранный режим Выход из полноэкранного режима

Хам…

  • Может возникнуть сомнение, которое возникает у многих разработчиков по поводу LGPD, потому что в зависимости от данных, которые объект хранит в состоянии, опасно регистрировать в журналах, для этого важно, чтобы вы настроили в своих журналах зависимостей маскировку некоторых данных журнала, в некоторых случаях также стоит проверить, имеет ли смысл иметь данные в toString.
  • Не помещайте значения, недоступные из класса, так как это не поможет в отладке объекта и сделает видимой ограниченную информацию класса.

Хорошая сторона

Большинство Ides позволяют перезаписывать toString более автоматически, например, в Intellij у нас есть возможность через меню правой кнопки мыши > generate > toString и появляется экран, где мы можем выбрать, какая информация необходима для генерации toString.

Это не всегда имеет смысл…

Не всегда объекты в вашей системе будут иметь цель сохранения состояния, как, например, контроллер или сервис, в этом случае нет смысла переопределять toString. Как правило, это имеет смысл только для доменных классов или классов, которые представляют объекты транзакций и хранят состояние.
Еще один момент, который следует учитывать, — это то, не переопределил ли суперкласс этот метод.

Оцените статью
devanswers.ru
Добавить комментарий