2012-05-08 39 views
12

我有一个ArrayList,它包含User类的一些对象。当我打印这些对象我:如何以正确的方式打印对象内容?

[用户@ 18fd984,用户@ 18fd984]

如何以正确的方式打印这些对象呢?

+0

这是正确的 - 默认的Object toString输出。为你的用例定义“正确”。 –

+4

对象的'toString'返回'getClass()。getName()+'@'+ Integer.toHexString(hashCode())'。您必须根据GuidoGarcí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

谢谢,我正在寻找类似的东西 – divine

1

看从PrintSteamprint(Object obj)方法的源代码:

public void print(Object obj) 
{ 
    write(String.valueOf(obj)); 
} 

String类的valueOf(Object obj)

public static String valueOf(Object obj) 
{ 
    return (obj == null) ? "null" : obj.toString(); 
} 

如您所见,obj.toString()被调用,并且@GuidoGarcía表示,覆盖toString()方法是您所需要的。

toString()方法在Object类的默认实现如下:

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

可能这是为时已晚来回答这个问题,但我被卡住了同样的问题,也写一些代码,还有一些额外的功能。

如果您仍然在寻找解决方案,这里是一个通用的解决方案。这肯定需要一些反思,但这可以解决这个问题。

A Generic toString() method in java

+0

这主要是一个链接唯一的答案。例如,您可以在答案中提供博客文章的基本内容,或者说明您的方法与另一个答案中提到的“ToStringBuilder.reflectionToString”不同。 – SpaceTrucker