Когда желательно не реализовывать toString () в Java? - PullRequest
41 голосов
/ 21 июля 2009

Ведущий разработчик моего проекта обратился к реализациям проекта toString () как к "чистой лжи" и надеется удалить их из базы кода.

Я сказал, что это будет означать, что любой клиент, желающий отобразить объекты, должен будет написать свой собственный код для преобразования объекта в строку, но на это ответили "да, они будут".

Теперь, в частности, объекты в этой системе являются графическими элементами, такими как прямоугольники, круги и т. Д., И текущее представление должно отображать x, y, масштаб, границы и т. Д. *

Так где же находится толпа?

Когда и когда не следует реализовывать toString?

Ответы [ 24 ]

1 голос
/ 21 июля 2009

реализовывать всегда :) Как уже упоминалось выше, это неоценимо для отладки.

0 голосов
/ 23 января 2019

Я подумал, что могу взвесить более современную перспективу, учитывая, что этому вопросу уже почти 10 лет.

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

Наличие toString метода в каждом отдельном классе является визуальным беспорядком, который скрывает полезное поведение класса. Нам также нужно помнить, чтобы поддерживать его - либо вручную, либо заново создавая метод из нашей IDE - каждый раз, когда мы меняем поля класса.

Так, что мы можем сделать, чтобы решить эти проблемы, не удаляя метод полностью? Ответ: автоматически сгенерирует его . Аннотация @ToString проекта Lombok может автоматически генерировать для вас метод toString во время компиляции, который включает любую комбинацию полей, которую вы выберете.

Базовый пример использования:

@ToString
public class Foo {
    private int i = 0;
}

Что станет эквивалентно следующему во время компиляции:

public class Foo {
    private int i = 0;

    public String toString() {
        return "Foo(i=" + this.i + ")";
    }
}
0 голосов
/ 31 марта 2016

Хотя toString() методы очень полезны для отладки классов значений, можно утверждать, что они не полезны для классов сущностей .

0 голосов
/ 22 июля 2009

Мы получаем исключение ConcurrentModificationException из одного из наших методов toString (), поэтому иногда возникает недостаток. Конечно, мы сами виноваты в том, что не синхронизировали его.

...