Каков ярлык для автоматического создания метода 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);
}
Ответы
Ответ 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+'}';
}
Его отличный способ отладки и отсутствие дополнительных библиотек.