How to print object content in correct way?
我有一个ArrayList,其中包含来自User类的一些对象。当我打印这些对象时,我得到:
[User@18fd984, User@18fd984]
号
如何正确打印这些对象?
- 这是正确的——默认的对象ToString输出。为您的用例定义"正确"。
- 对象的toString返回getClass().getName() + '@' + Integer.toHexString(hashCode())。您必须根据guido garc的答案为类重写此方法。
在类中重写EDCOX1(0)方法以生成您喜欢的输出,而不是Java自动生成的默认值。例子:
1 2 3 4 5 6 7 8
| public class User {
private String name ;
...
@Override
public String toString () {
return name ;
}
} |
对于复杂的对象,ApacheCommonsLang提供了一些方便的方法,如果您已经在项目中使用了这种依赖关系:
1 2 3 4
| @Override
public String toString () {
return ToStringBuilder. reflectionToString(this);
} |
号
查看PrintSteam类中print(Object obj)方法的源代码:
1 2 3 4
| public void print (Object obj )
{
write (String. valueOf(obj ));
} |
和String类的valueOf(Object obj):
1 2 3 4
| public static String valueOf (Object obj )
{
return (obj == null) ?"null" : obj. toString();
} |
。
如您所见,调用obj.toString()和@guido garc_a状态时,需要覆盖toString()方法。
Object类中toString()方法的默认实现如下:
1 2 3 4
| public String toString ()
{
return getClass (). getName() +"@" + Integer. toHexString(hashCode ());
} |