Как правильно печатать содержимое объекта?
У меня есть ArrayList
, который содержит некоторые объекты из класса User
. Когда я печатаю эти объекты, я получил:
[Пользователь @18fd984, Пользователь @18fd984]
Как правильно печатать эти объекты?
Ответы
Ответ 1
Переопределите метод toString
в классе для получения предпочтительного результата вместо значения по умолчанию, которое автоматически генерирует Java. Пример:
public class User {
private String name;
...
@Override
public String toString() {
return name;
}
}
Для сложных объектов Apache Commons Lang предоставляет некоторые удобные методы, если вы уже используете эту зависимость в своем проекте:
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
Ответ 2
Посмотрите исходный код метода print(Object obj)
из класса PrintSteam
:
public void print(Object obj)
{
write(String.valueOf(obj));
}
и valueOf(Object obj)
класса String
:
public static String valueOf(Object obj)
{
return (obj == null) ? "null" : obj.toString();
}
Как вы видите, вызывается obj.toString()
, и, как утверждает @Guido García, переопределение метода toString()
- это то, что вам нужно.
Стандартная реализация метода toString()
в классе Object
выглядит следующим образом:
public String toString()
{
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Ответ 3
Может быть, слишком поздно, чтобы ответить на вопрос, но я столкнулся с той же проблемой, также написал некоторый код с некоторыми дополнительными функциями.
Если вы все еще ищете решение, это общее решение. Это определенно требует некоторого размышления, но это решает цель.
Общий метод toString() в java