ArrayList
クラスのオブジェクトを含むUser
があります。これらのオブジェクトを印刷すると、次のようになります。
[User @ 18fd984、User @ 18fd984]
これらのオブジェクトを正しい方法で印刷する方法は?
Javaが自動的に生成するデフォルト値の代わりに、クラスのメソッドtoString
をオーバーライドして、好みの出力を生成します。例:
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());
}
_