Подтвердить что ты не робот

Каков ярлык для автоматического создания метода toString в Eclipse?

Это хорошая или плохая практика автоматического создания методов 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);
}
4b9b3361

Ответ 1

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

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

Ответ 2

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

Я бы рассмотрел использование Apache Commons ToStringBuilder.

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

И будьте внимательны к глупым циклам exception-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);
           }

       }

}

Ответ 5


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


  • Нажмите Alt + Shift + S + S (двойной)
  • Щелкните правой кнопкой мыши → Источник → Создать toString()...
  • Перейдите в Исходное меню → Сгенерируйте toString()...
  • Перейдите в меню Windows → Настройки → Общие → Ключи (Write Generate toString в текстовом поле)

Ответ 6

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

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

Ответ 7

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

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

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

Его отличный способ отладки и отсутствие дополнительных библиотек.