如何以正确的方式打印对象内容?
我有一个ArrayList
,其中包含User
类中的一些对象。 当我打印这些对象时,我得到了:
[User @ 18fd984,User @ 18fd984]
如何以正确的方式打印这些对象?
覆盖类中的方法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); }
从PrintSteam
类中查看print(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()
方法就是您所需要的。
Object
类中toString()
方法的默认实现如下:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
可能这已经太迟了,无法回答这个问题,但我还是遇到了同样的问题,还写了一些代码,还有一些额外的function。
如果您仍在寻找解决方案,这里是一个通用的解决方案。 这肯定需要一些反思,但这解决了目的。
java中的Generic toString()方法