これは非常に基本的に聞こえるかもしれません...誰かがtoString()
メソッドの使用法と、これを効果的に使用するタイミングについて説明できますか?
グーグルで検索しましたが、良いリソースが見つかりませんでした。
ほとんどの言語では、toString
または同等のメソッドは、オブジェクトをテキストで表現できることを保証するだけです。
これは、ロギング、デバッグ、または遭遇するすべてのオブジェクトを文字列としてレンダリングできる必要があるその他の状況で特に役立ちます。
多くの場合、オブジェクトはカスタムtoString
動作を実装しているため、メソッドは実際にオブジェクトインスタンスについて何かを教えてくれます。たとえば、Person
クラスはそれをオーバーライドして「姓、名」を返す場合がありますが、Date
クラスはデフォルト設定(現在のユーザーインターフェイスカルチャなど)に従ってフォーマットされた日付を表示します)。
クラスのtoStringメソッドをオーバーライドしたい状況はいくつかありますが(そのほとんどは既存の回答ですでに言及されています)、オブジェクトでtoStringを明示的に呼び出す必要がある最も一般的な状況の1つは次のとおりです。 StringBuilderを使用して文字列を作成する場合。
public String createString(final String str) {
final StringBuilder sb = new StringBuilder(str);
sb.append("foo");
sb.append("bar");
return sb.toString();
}
したがって:
out.println("You are " + user);
ユーザーがnullの場合、またはtoStringがこの(存在する)インスタンスに対して「James」を表示する場合、「Youarenull」または「YouareJames」を表示します。
.NETまたはJavaを想定:
一般に、クラスのテキスト表現が必要な場合は、ToString()をオーバーロードする必要があります(クラスにとって意味があると仮定します)。
クラスでtoString()をオーバーライドして、オブジェクトの意味のあるテキスト表現を提供することができます。
たとえば、PersonクラスのtoString()をオーバーライドして、姓名を返すことができます。
参照変数を出力すると、次のタスクが発生します。
toString()
メソッドはJVMによって自動的に呼び出されます。デフォルトでは、_Object.class
_のtoString()
は次のように出力します。
ClassName @ HexadecimalOfHashCode
クラスでこのメソッドをオーバーライドして、意味のある文字列を表示できます。通常、toString()
メソッドは、オブジェクトのコンテンツを出力するために使用されます。このメソッドは、String
、StringBuffer
、integer
など。
toString()を使用して16進アドレスを回避できるため、この問題を解決するには、toString()をオーバーライドする必要があります。そうすると、データの元のテキスト形式が取得されます。
データ型を文字列に変更する必要がある場合は、Tostringを使用する必要があります。 intなどの組み込み型の場合、文字列表現が期待されます。すなわち
int i = 5;
string s = i.ToString(); //s now equals "5"
ほとんどの複雑な型と、tostringメソッドをオーバーロードする必要があるすべてのユーザー作成型の文字列「5」を提供します。そうしないと、クラスの名前のみが取得されます。文字列にするには、独自のオブジェクトを使用して.netに組み込まれた複雑なフォーマットを使用できます。 datetimeクラスのように複雑なフォーマッターを提供して、独自の型を柔軟に使用できます。
これは、コンストラクターを介して初期化するフィールド値と、ゲッターを使用せずに表示するものを表示する必要がある場合に使用されます。
import Test.Date;
public class Employ {
private String firstname;
private String lastname;
private Date DOB;
private Date DOH;
public Employ(String name,String lastname,Date DOB,Date DOH)
{
this.firstname=name;
this.lastname=lastname;
this.DOB=DOB;
this.DOH=DOH;
}
public String toString(){
return String.format("%s %s Birthday %s Hired %s",firstname,lastname,DOB,DOH);
}
public static void main (String args[])
{
Date dob= new Date(12,3,1992);
Date doh= new Date(10,6,2005);
Employ em= new Employ("BOB", "Wrigh", dob,doh);
System.out.println(em);
}
}