2012-05-08 2 views
12

У меня есть ArrayList, который содержит некоторые объекты из класса User. Когда я печатаю эти объекты я получил:Как правильно печатать содержимое объекта?

[User @ 18fd984, пользователь @ 18fd984]

Как напечатать эти объекты в правильном пути?

+0

Это правильно - выходной объект Object toString по умолчанию. Определите «правильный» для вашего использования. –

+4

Объект 'toString' возвращает' getClass(). GetName() + '@' + Integer.toHexString (hashCode()) '. Вы должны переопределить этот метод для своего класса за ответ Guido García. –

ответ

13

Переопределите метод 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); 
} 
+0

thankyou, я искал что-то вроде этого – divine

1

Посмотрите на исходный код 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 Гарсиа, перекрывая toString() метода является то, что вам нужно.

Реализация по умолчанию toString() метода в Object класса выглядит следующим образом:

public String toString() 
{ 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 
0

Может быть, это слишком поздно, чтобы ответить на этот вопрос, но я застрял с той же проблемой, также написал код , с некоторыми дополнительными функциями.

Если вы все еще ищете решение, это общее решение. Это определенно требует некоторого размышления, но это решает цель.

A Generic toString() method in java

+0

Это в основном ответ только на ссылку. Например, вы можете предоставить основную часть сообщения в блоге в своем ответе или рассказать, как ваш метод отличается от «ToStringBuilder.reflectionToString», упомянутого в другом ответе. – SpaceTrucker