Каковы ярлыки для автоматического создания метода toString в Eclipse? - PullRequest
27 голосов
/ 16 апреля 2010

Это хорошая или плохая практика автоматической генерации toString методов для некоторых простых классов?

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

private String name;
private int age;
private double height;

public String toString(){
   return String.format("Name: %s Age: %d Height %f", name, age, height);
}

Ответы [ 8 ]

40 голосов
/ 16 апреля 2010

Eclipse 3.5.2 (и, возможно, более ранние версии) уже предоставляет эту функцию. Если вы щелкнете правой кнопкой мыши в редакторе, вы найдете его в Source -> Generate toString () ...

Чтобы ответить на ваш вопрос о том, является ли плохой практикой автоматическое создание toString(), я считаю, что это не так. Если сгенерированный код очень похож на код, который вы написали бы сами, зачем его печатать?

32 голосов
/ 16 апреля 2010

Мне лично нравится реализовывать метод toString для всех объектов, так как он помогает в отладке.

Я хотел бы изучить использование Apache Commons ToStringBuilder .

Вы можете реализовать простой метод toString, используя отражение следующим образом:

public String toString() {
   return ToStringBuilder.reflectionToString(this);
}

Используя этот метод, вам не придется обновлять ваш метод toString, если / когда поля добавлены.

10 голосов
/ 20 апреля 2010

Если вы используете lombok , у них есть аннотация @ ToString , которая сгенерирует для вас строку toString.

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

5 голосов
/ 16 апреля 2010

Добавить к ответам Стива и Дона (+1 для них):

Сделайте ваш метод toString() простым, убедитесь, что он никогда не вызывает ожидания (особенно помните о полях, которые могут быть нулевыми)

Если возможно, не вызывайте другие методы вашего класса. По крайней мере, убедитесь, что ваш метод toString() не изменяет ваш объект.

И помните о глупых циклах исключений-toString:

public class MyClass { 
       ... 
       public String toString() { 
          // BAD PRACTICE 1: this can throw NPE - just use field1
            return " field1=" + field1.toString() 
                + " extraData=" + getExtraData();
          // BAD PRACTICE 2: potential exception-toString loop
       }

       public MyExtraData getExtraData() {
           try { 
           .... do something
           } catch(Exception e) {
              throw new RuntimeException("error getting extradata - " + this.toString(),e);
           }

       }

}
2 голосов
/ 04 апреля 2018

В IntelliJ Idea вы можете нажать alt + insert, откроется всплывающее окно Generate; Теперь выберите поля и нажмите кнопку ОК; это все.

Generate Popup by pressing alt + insert

Select Fields and keep the default template as such

the generated to string function

Дальнейший совет: в диалоговом окне Generate toString вы можете выбрать шаблон, щелкнув раскрывающееся меню со списком шаблонов. Здесь вы можете выбрать StringBuffer, если вам нужно, или любой другой шаблон, как требуется. Играть с ним, чтобы привыкнуть. Мне это нравится:)

1 голос
/ 08 октября 2015

Ярлык для генерации метода toString ()


  1. Нажмите Alt + Shift + S + S (двойной)
  2. Щелкните правой кнопкой мыши -> Source -> Generate toString () ...
  3. Перейти к Исходное меню -> Создать toString () ...
  4. Перейдите в Меню Windows -> Настройки -> Общие -> Ключи (Write Generate toString в текстовом поле)
0 голосов
/ 24 февраля 2017

Только что заметил - В IDE NetBeans вы можете сгенерировать метод toString (), выбрав поля, которые вы хотите сгенерировать для right click->insert code, или используйте ярлык ALT+INSERT, а затем выберите toString ().

Как это выглядит:

@Override
public String toString() {
    return "ClassName{"+"fieldName="+fieldName+'}';
}

Отличный способ отладки и не требует дополнительных библиотек.

0 голосов
/ 18 апреля 2010

Будьте внимательны при добавлении toString () в отношении аудитории сгенерированного текста. Некоторые платформы используют метод toString () для генерации видимого текста конечного пользователя (например, определенные веб-структуры), тогда как многие люди используют методы toString () для генерации информации отладки / разработчика. В любом случае, убедитесь, что у вас достаточно уникальности в реализации toString, чтобы удовлетворить ваши требования.

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

...