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
зберігання інших об'єктів.
Бонусні підказки
Ще кілька бонусних підказок з перевизначення методуtoString
Java.
-
Друкувати виведення
toString
в кілька рядків або в один ґрунтуючись на його довжині. -
Включати повні імена класів у виставу
toString
, тобтоpackage.class
щоб уникнути будь-якого нерозуміння. -
Можна пропускати значення null або показувати їх, але краще показувати. Іноді вони корисні, оскільки показують, яке поле є
null
під час якогось інциндента, наприклад NullPointerException . -
Використовуйте формат ключ-значення, наприклад
member.name=member.value
більшість IDE підтримують це. -
Включайте успадкованих членів, якщо ви вважаєте, що вони повинні надавати необхідну інформацію до класу спадкоємця.
-
Іноді об'єкт містить багато необов'язкових і обов'язкових параметрів, як ми показали в прикладі шаблону Builder , коли практично неможливо роздрукувати всі поля, в цьому випадку можна виводити тільки обов'язкові поля, тим більше, що у нас є необов'язкові.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ