Метод toString()
Як простіше вивести об'єкт?
Для відображення всіх даних об'єкта за допомогою команди System.out.println(object);
у Java існує метод toString();
.
toString()
Метод toString
у Java — це вбудований метод, який належить до класу Object
. Він використовується для повернення рядкового представлення об'єкта. За замовчуванням, коли ми викликаємо toString
для об'єкта, він повертає рядок, що містить назву класу та хеш-код об'єкта.
Розглянемо приклад:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }
HashCode
Hashcode — це унікальний ідентифікатор для об'єкта, який зберігається в пам'яті. Ми також можемо переглянути хеш-код об'єкта, викликавши для нього метод hashCode()
, наприклад:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }
У такому випадку виникає питання: як отримати щось більш конкретне замість хеш-коду об'єкта? Для таких випадків ми можемо перевизначити метод toString()
.
Наслідування та перевизначення методів — це об'ємні теми, які ми розглянемо в окремому курсі. Наразі ми будемо використовувати перевизначення методу лише для методу toString()
.
Як використовувати toString()
Щоб перевизначити метод, потрібно використати наступний синтаксис:
Main.java
@Override public String toString() { // block of code }
Ми використовуємо анотацію @Override
перед цим методом. Завдяки цій анотації компілятор розпізнає, що ми перевизначаємо цей метод. Далі вказуємо синтаксис public String toString()
, що означає, який саме метод ми перевизначаємо.
У тілі цього методу ми визначаємо, як наш об'єкт має бути представлений у вигляді рядка. Перевизначимо метод для класу Person
:
Person.java
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Команда System.lineSeparator()
використовується для створення нового рядка.
Ми визначили, як має виглядати наш об'єкт, шляхом конкатенації рядків із їхніми значеннями. Тому, коли ми намагаємося вивести об'єкт класу Person
, ми побачимо детальну інформацію про кожне поле.
Виведемо об'єкт за допомогою методу main
і подивимось, як це виглядає:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Ми отримали інформацію про клас, до якого належить об'єкт bob
, а також деталі щодо всіх його полів.
Таким чином, ми можемо перевизначити та задати метод toString()
, щоб відображати потрібну інформацію під час виведення об'єкта. Створимо ще один об'єкт цього класу за допомогою конструктора, щоб побачити й закріпити, як метод toString()
трансформує об'єкт:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }
Ми можемо побачити, що новий об'єкт alice
відображається в консолі за тим самим шаблоном.
Висновок
Використовуючи метод toString()
, ми значно спростили процес виведення інформації про об'єкт на екран, що дозволяє заощадити місце в основному методі.
1. Навіщо потрібен метод toString()
?
2. Яку анотацію слід використовувати над методом toString()
?
Дякуємо за ваш відгук!