Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как вывести объект в читаемом виде

Короткий ответ

Переопределите toString() — его вызывает IO.println() и склейка со строкой:

class Product {
    String name = "Tea";
    double price = 3.5;
 
    @Override
    public String toString() {
        return name + " (" + price + " €)";
    }
}
 
void main() {
    IO.println(new Product());
    IO.println("Item: " + new Product());
}

Результат:

Tea (3.5 €)
Item: Tea (3.5 €)

Записи

У записей toString() уже есть: он показывает имя типа и все поля:

record User(String name, int age) {}
 
void main() {
    IO.println(new User("Anna", 30));
}

Результат:

User[name=Anna, age=30]

Скрыть секретные поля

Пароли и токены не должны попадать в логи. Переопределите toString() у записи:

record Credentials(String login, String password) {
    @Override
    public String toString() {
        return "Credentials[login=" + login + ", password=***]";
    }
}
 
void main() {
    IO.println(new Credentials("anna", "s3cret"));
}

Результат:

Credentials[login=anna, password=***]

Частая ошибка

Не переопределить toString(). Тогда выводится имя класса и хеш-код, которые ничего не говорят:

class Product {
    String name = "Tea";
}
 
void main() {
    IO.println(new Product());
}

Результат:

Main$Product@2698dc7

Число после @ у вас будет другим.

Функции из этого ответа

  • Object.toString() — Возвращает текстовое представление объекта; вызывается при выводе и сложении со строкой.
  • record — Объявляет запись — неизменяемый класс для хранения данных с готовыми equals(), hashCode() и toString().
  • Arrays.toString() — Возвращает содержимое массива в виде строки [1, 2, 3].

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.