2012-05-08 6 views
12

Userクラスのオブジェクトを含むArrayListがあります。私は、これらのオブジェクトを印刷するとき私が得た:オブジェクトの内容を正しく印刷する方法は?

を[ユーザー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は、いくつかの便利な方法を提供しています。

PrintSteamクラスから print(Object obj)メソッドのソースコードを
@Override 
public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 
+0

こんにちは、私はこのようなものを探していた – divine

1

ルック:

Stringクラスの
public void print(Object obj) 
{ 
    write(String.valueOf(obj)); 
} 

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

ご覧のとおり、obj.toString()が呼び出され、@Guidoガルシアの状態として、toString()メソッドをオーバーライドすることは何が必要です。次のように

ObjectクラスのtoString()メソッドのデフォルトの実装は次のとおりです。

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

がこの質問に答えるためにはるかに遅すぎるかもしれないが、私は同じ問題にまでこだわった、また、いくつかのコードを書きましたいくつかの追加機能があります。

ここで解決策を探している場合は、一般的な解決策があります。これは間違いなくある反射を必要とするが、これは目的を解決する。

A Generic toString() method in java

+0

これは主にリンクの答えです。例えば、あなたの答えにブログの投稿の本質を提供したり、あなたのメソッドと別の答えに書かれている 'ToStringBuilder.reflectionToString'との違いを教えてください。 – SpaceTrucker

関連する問題