Характерной ошибкой, с которой часто сталкиваются начинающие разработчики на Java, является получение вывода вида «SomeType@2f92e0f4» при попытке вывести на печать объект. Приведем пример.
Есть класс Book
:
public class Book { private String title; // конструктор и геттеры/сеттеры пропущены }
И попытка вывести на печать экземпляр этого класса:
System.out.println(myBook);
Вместо ожидаемого названия книги в консоли отображается что-то вроде com.foo.Book@2f92e0f4
.
Подобная ситуация может возникнуть и при попытке вывести на печать массив объектов:
Book[] books = //... System.out.println(books);
Вывод будет выглядеть примерно так: [Lcom.foo.Book;@28a418fc
.
Что это значит?
Это стандартное представление объекта в Java. com.foo.Book
— это имя класса, а 2f92e0f4
— хеш-код объекта.
Как вывести информацию об объекте?
Для этого нужно переопределить метод toString()
в классе. Этот метод возвращает строковое представление объекта. По умолчанию он выводит имя класса и хеш-код объекта, как описано выше. Но можно изменить его так, чтобы он возвращал информацию, которую вы хотите видеть.
Пример реализации:
@Override public String toString() { return "Book{" + "title='" + title + '\'' + '}'; }
Теперь, вызывая System.out.println(myBook);
, вы получите Book{title='Название книги'}
.
Для печати массивов объектов можно использовать вспомогательные методы из класса java.util.Arrays
. Например, Arrays.toString(books);
.
Таким образом, для получения информации об объекте или массиве объектов при печати, следует переопределить метод toString()
в классе.
Добавить комментарий