JavaRush /Java блог /Random UA /10 підказок з перевизначення методу toString() у Java (ча...
Ku6ep
35 рівень

10 підказок з перевизначення методу toString() у Java (частина 2)

Стаття з групи Random UA

toString приклади в Java

Ми будемо використовувати наступний клас, щоб продемонструвати наш приклад toString для Netbeans, Eclipse і Apache's ToStringBuilder утиліти.

/** * Java программа, демонстрирующая як переопределить метод toString() в Java. * Эта Java программа показывает як вы можете использовать IDE типа Netbeans або Eclipse * и открытую библиотеку типа Apache commons ToStringBuilder для * переопределения toString в Java. * @author Javarevisited.blogspot.com */ public class Country { private String name; private String capital; private long population; private Date independenceDay; public Country(String name){ this.name = name; } public String getName(){ return name; } public void setName(String name) {this.name = name;} public String getCapital() {return capital;} public void setCapital(String capital) {this.capital = capital;} public Date getIndependenceDay() {return independenceDay;} public void setIndependenceDay(Date independenceDay) {this.independenceDay = independenceDay;} public long getPopulation() { return population; } public void setPopulation(long population) {this.population = population; } @Override public String toString() { return "Country{" + "capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + '}'; } public void setIndependenceDay(String date) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { this.independenceDay = format.parse(date); } catch (ParseException ex) { Logger.getLogger(Country.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { Country India = new Country("India"); India.setCapital("New Delhi"); India.setIndependenceDay("15/07/1947"); India.setPopulation(1200000000); System.out.println(India); } }

Метод toString створений Netbeans IDE


Метод toString створений Netbeans IDE створює такий висновок для певного класу:

Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}

Якщо ви подивитеся на наведений висновок, то побачите, що Netbeans не створює форматовану дату для вас: натомість він викликає метод toString() класу java.util.Date

Метод toString() створений IDE Rclise


За замовчуванням Eclipse створює наступний метод toString:

@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }

Ви можете створити код для методу toString в Eclipse, натиснувши на Source --> Generate toString(). Це також надає кілька можливостей, таких як вибір стилю коду, тобто використання операнда конкатенації або StringBuilder і так далі. Нижче висновок методу toString() який ми щойно створабо в Eclipse:

Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]

Використання ToStringBuilder для перевизначення методу Java toString()

Разом з багатьма корисними класами, такими як PropertyUtils , EqualsBuilder або HashCodeBuilder Apache також надає ToStringBuilder, який може генерувати код для виведення методу toString() декількома різними стилями. Давайте подивимося як виглядає висновок методу toString у простому та багаторядковому стилі: Простий стиль:

India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947

Багаторядковий стиль:

test.Country@f0eed6[
 name=India
 capital=New Delhi
 population=1200000000
 independenceDay=Fri Aug 15 00:00:00 VET 1947
 ]

NO_FIELD_NAMES_STYLE (стиль без імен полів)

test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]

SHORT_PREFIX_STYLE (стиль із коротким префіксом)

Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

ToStringStyle.DEFAULT_STYLE (стиль за замовчуванням)

test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

Схожа відкрита бібліотека від Google - Guava також надає зручний API для створення коду методу toString в Java.

Коли Java викликається метод toString

toString досить специфічний метод і викликається з безлічі JavaAPI методів таких як println(), printf() , журналування, assert statement , відладники в IDE, при роздруківці колекцій і конкатенації. Якщо підклас не перевизначає toString(), тоді викликається стандартна реалізація визначена в класі Object. Багато розробників використовують API для журналу типу Log4J або java.util.Logger для виведення журналів і часто пропускають тут Object.

logger.info("Customer not found:" + customer)

і якщо Customer не перевизначає toString і не виводить важливу інформацію, таку як customerId, customerName і т.д. то досить важко буде діагностувати проблему. Це те, чому завжди варто перевизначати toString в Java. Давайте поглянемо на деякі переваги у випадку, якщо ми це робитимемо.

Переваги перевизначення методу toString

  1. Як говорилося вище, правильно перевизначений toString допомагає у налагодженні шляхом виведення важливої ​​інформації.
  2. Якщо важливий об'єкт збережено в колекції, тоді друк колекції викликає вString метод збереженого об'єкта, який зможе роздрукувати важливу інформацію. Один із класичних прикладів не перевизначеного методу toString - це Array в Java, який друкує результат реалізації за замовчуванням, замість вмісту масиву. Хоча є кілька способів роздрукувати вміст масиву за допомогою Arrays.toString() тощо; але оскільки Array є об'єктом Java, було б набагато краще, якби він знав як роздрукувати себе, так само як класи колекцій, на кшталт List або Set .

Це лише деякі з переваг, які ви отримаєте при реалізації або перевизначенні методу toString в Java , багато інших переваг ви отримаєте і вивчите самі. Я сподіваюся, ці підказки допоможуть вам отримати більшість ваших реалізацій toString. Дайте нам знати, якщо ви знаєте якісь унікальні способи роботи з toString які допомагають вам у ваших Java додатках.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ