web-dev-qa-db-ja.com

オブジェクトのコンテンツを正しい方法で印刷する方法は?

ArrayListクラスのオブジェクトを含むUserがあります。これらのオブジェクトを印刷すると、次のようになります。

[User @ 18fd984、User @ 18fd984]

これらのオブジェクトを正しい方法で印刷する方法は?

12
Mohamed Gamal

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);
}
13
Guido

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());
}
_
1
Eng.Fouad