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

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

Стаття з групи Random UA
10 підказок з перевизначення методу toString() у Java - ToStringBuilder Netbeans Eclipse 10 підказок з перевизначення методу toString() у Java (частина 1) - 1

Java toString метод

toStringМетод Java використовується для надання ясної і достатньої інформації про об'єкт ( Object) в зручному для людини вигляді. Правильне перевизначення методу toStringможе допомогти у веденні журналу роботи та у налагодженні Java програми надаючи цінну та важливу інформацію. Оскільки toString()визначений у java.lang.Objectкласі та його реалізація за умовчанням не надає багато інформації, завжди найкращою практикою є перевизначення даного методу у класі-нащадку. Фактично, якщо ви створюєте важливий або загальний клас типу Order, Tradeабо Employeeзавжди перевизначайте equals , hashCode , compareTo і toStringметоди в Java. За замовчуванням реалізаціяtoStringстворює висновок у вигляді package.class@hashCode, наприклад для нашого прикладу toString(), toString()метод класу Countryнадрукує test.Country@18e2b22 де 18e2b22 це хеш-код об'єкта в шістнадцятковому вигляді, якщо ви викличете hashCode метод, то він поверне 260943370, що є десятковим еквівалентом Ця інформація не є особливо корисною під час пошуку будь-якої проблеми. Давайте подивимося на приклад з реального життя, де вам потрібно знайти проблему в з'єднанні з мережею, в тому випадку якщо ви хочете знати з яким саме хостом і портом намагається з'єднатися ваша система і якщо друкує тільки інформацію за умовчанням, то неможливо уявити Socketреальну ServerSocketпроблему toString, але з перевизначеною реалізацієюtoStringвони можуть надати корисну інформацію, таку як ім'я хоста та номер порту. У цій Java-консультації ми дамо кілька підказок щодо перевизначення методу toStringз прикладами коду.

Як перевизначити метод toString в Java:

Друк форматованої дати (тобто день/місяць/рік) замість "сирого" значення. Це дуже корисна підказка при перевизначенні Java-методу toString. Звичайний toString()клас java.util.Dateне виводить форматовану дату і включає багато деталей, які не завжди потрібні. Якщо ви використовуєте частковий DateFormat , тобто. dd-MM-yy у вашому додатку, то ви напевно хотіли б бачити цей формат замість даного за умовчанням. IDE зазвичай не генерує форматований висновок Dateі це те, що вам потрібно зробити самому, але це того варте. Прочитайте Як роздрукувати Date у форматі ddMMyy у Java , де детально описано форматування Dateу Java. Ви також можете використовувати SimpleDataFormat клас або бібліотеку Joda Date time для цього.

Документування формату toString

Якщо ваш метод toString()не виводить дані у вигляді поле = значення, то гарною ідеєю буде документування формату виведення toString, особливо для важливих об'єктів типу Працівник або Студент. Наприклад якщо метод toString()класу Работник(Employee)друкує " John-101-Sales-9846387321 " то гарною практикою буде вказати формат як "ім'я-ID-відділ-контакт", але в той же час не давайте клієнту можливість отримувати інформацію з методу toString(), ви повинні завжди надавати відповідні методи для отримання даних, такі як getName(), getId(), getContact()і так далі, оскільки інформація отримана з toString()подання об'єкта є крихкою і схильна до помилок, так що клієнт завжди повинен мати чистий шлях отримання інформації.

Використовуйте StringBuilder для складання виводу toString()

Якщо ви пишете код для методу toString()Java, тоді використовуйте StringBuilder щоб додати окремі атрибути. Якщо ви використовуєте IDE на кшталт Eclipse , Netbeans або IntelliJ тоді використання StringBuilderі метод append()замість оператора + для складання toString, так само є правильним шляхом. За замовчуванням Eclipse і Netbeans генерують toStringз оператором конкатенації.

Використання анотації @Override

Використання @Overrideпри перевизначенні методу Java це одна з кращих практик в мові. Але ця підказка не така важлива, як це було б у випадку з перевизначенням методів equals()і compareTo(), оскільки перевантаження замість перевизначення може створити більш тонкі помилки, що складно обчислюються. У будь-якому випадку краще використовувати інструкцію @Overrride.

Друк вмісту масиву замість виведення об'єкта масиву

Масив це об'єкт в Java але він не перевизначає метод toStringі коли ви друкуєте масив, то за замовчуванням формат виводу не є особливо корисним, оскільки ми хотіли б бачити вміст масиву. До речі, це ще одна причина чому char[] array краще String для зберігання чутливих даних, таких як пароль. Знайдіть час поглянути чи допомагає друк вмісту масиву вашим клієнтам чи ні і якщо це має сенс, то друкуйте вміст масиву замість об'єкта. З міркувань продуктивності краще використовувати Collectionтакі як ArrayListабо HashSet замість Arrayзберігання інших об'єктів.

Бонусні підказки

Ще кілька бонусних підказок з перевизначення методу toStringJava.
  1. Друкувати виведення toStringв кілька рядків або в один ґрунтуючись на його довжині.

  2. Включати повні імена класів у виставу toString, тобто package.classщоб уникнути будь-якого нерозуміння.

  3. Можна пропускати значення null або показувати їх, але краще показувати. Іноді вони корисні, оскільки показують, яке поле є nullпід час якогось інциндента, наприклад NullPointerException .

  4. Використовуйте формат ключ-значення, наприклад member.name=member.valueбільшість IDE підтримують це.

  5. Включайте успадкованих членів, якщо ви вважаєте, що вони повинні надавати необхідну інформацію до класу спадкоємця.

  6. Іноді об'єкт містить багато необов'язкових і обов'язкових параметрів, як ми показали в прикладі шаблону Builder , коли практично неможливо роздрукувати всі поля, в цьому випадку можна виводити тільки обов'язкові поля, тим більше, що у нас є необов'язкові.

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