Java で toString() メソッドをオーバーライドするための 10 のヒント - ToStringBuilder Netbeans Eclipse
JavaのtoStringメソッド
toString
Java のメソッドは、オブジェクト ( Object
) に関する明確で十分な情報を人間が読める形式で提供するために使用されます。メソッドを適切にオーバーライドすると、価値のある重要な情報が提供されるため、Java プログラムのロギングとデバッグtoString
に役立ちます。このメソッドはクラス内で定義されており、そのデフォルトの実装では多くの情報が提供されないため、子孫クラスでこのメソッドをオーバーライドすることが常にベスト プラクティスです。実際、タイプ 、または の重要なクラスまたは一般的なクラスを作成している場合は、Javaで、equals、hashCode、compareToおよびメソッドを常にオーバーライドしてください。デフォルトでは、実装はの形式で出力を生成します。たとえば、この例では、クラス メソッドはtest. Country@18e2b22 を出力します。ここで、 18e2b22 は 16 進数のオブジェクトのハッシュ コードです。 hashCodeメソッドを呼び出すと、これは 260943370 を返します。 18e2b22 に相当する10 進数。この情報は、問題を検索する場合には特に役に立ちません。ネットワーク接続の問題を見つける必要がある実際の例を見てみましょう。システムが接続しようとしているホストとポートを知りたい場合、デフォルトの情報を出力するか、デフォルトの情報のみを出力する場合は、次のようになります。実際の問題を想像することは不可能ですが、オーバーライドされた実装を使用すると、ホスト名やポート番号などの有用な情報を提供できます。この Java チュートリアルでは、コード例を使用してメソッドのオーバーライドに関するヒントをいくつか紹介します。 toString()
java.lang.Object
Order
Trade
Employee
toString
toString
package.class@hashCode
toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
Java で toString メソッドをオーバーライドする方法:
生の値の代わりにフォーマットされた日付 (つまり、日/月/年) を出力します。これは、Java メソッドをオーバーライドするときに非常に役立つヒントですtoString
。通常のtoString()
クラスはjava.util.Date
書式設定された日付を出力せず、必ずしも必要ではない多くの詳細が含まれます。部分的なDateFormatを使用している場合、つまり アプリケーションで dd-MM-yy を使用している場合は、デフォルトの形式ではなくこの形式を使用することをお勧めします。通常、IDE はフォーマットされた出力を生成しないDate
ため、これは自分で行う必要がありますが、それだけの価値はあります。Java での書式設定の詳細については、「Java で ddMMyy 形式で日付を印刷する方法」を参照してくださいDate
。これには、 SimpleDataFormatクラスまたは Joda Date time ライブラリ を使用することもできます。
toString 形式の文書化
メソッドがtoString()
データを field=value として出力しない場合、特に Employee や Student などの重要なオブジェクトについては、出力形式を文書化することをお勧めしますtoString
。たとえば、toString()
クラスメソッドがРаботник(Employee)
「John-101-Sales-9846387321」を出力する場合、形式を「name-id-Department-contact」として指定することをお勧めしますが、同時にクライアントが取得できるようにしないことをお勧めします。メソッドからの情報を取得する場合は、 、などのtoString()
データを取得するための適切なメソッドを常に提供する必要があります。オブジェクト表現から取得される情報は脆弱でエラーが発生しやすいため、クライアントは常に、情報。 getName()
getId()
getContact()
toString()
StringBuilder を使用して toString() の出力を作成する
toString()
Java でメソッドのコードを作成している場合は、 StringBuilderを使用して個々の属性を追加します。Eclipse、 Netbeans 、 IntelliJ などの IDE を使用している場合は、 + 演算子の代わりにStringBuilder
and メソッドを使用して構成することもできます。デフォルトでは、Eclipse と Netbeans は両方とも連結演算子を使用して生成します。 append()
toString
toString
@Override アノテーションの使用
Java でメソッド オーバーライドを使用することは@Override
、言語におけるベスト プラクティスの 1 つです。equals()
ただし、このヒントは、およびメソッドをオーバーライドする場合ほど重要ではありませんcompareTo()
。オーバーライドの代わりにオーバーロードすると、計算が困難な微妙なエラーが発生する可能性があるためです。いずれの場合も、アノテーションを使用することをお勧めします@Overrride
。
配列オブジェクトを出力する代わりに配列の内容を出力する
配列は Java のオブジェクトですが、メソッドをオーバーライドしません。toString
また、配列を印刷する場合、配列の内容を確認したいため、デフォルトの出力形式はあまり役に立ちません。ちなみに、これが、パスワードなどの機密データを保存する場合にString よりも char[] 配列が推奨されるもう 1 つの理由です。配列の内容を出力することがクライアントに役立つかどうかを時間をかけて検討し、意味がある場合は、オブジェクト自体ではなく配列の内容を出力します。パフォーマンス上の理由から、他のオブジェクトを保存する代わりに、Collection
そのようなオブジェクトArrayList
やHashSetを使用することをお勧めしますArray
。
ボーナスのヒント
Java でのメソッドのオーバーライドに関する追加のヒントをいくつか紹介しますtoString
。
-
出力を
toString
複数行で印刷するか、長さに応じて 1 行で印刷します。 -
toString
言い換えれば、package.class
誤解を避けるために、表現には完全修飾クラス名を含めてください。 -
null 値をスキップしたり表示したりできますが、表示した方がよいでしょう。これらは、 NullPointerException
null
など、何らかのインシデント中にどのフィールドが存在するかを示すため、役立つ場合があります。 -
たとえば
member.name=member.value
、キーと値の形式を使用します。ほとんどの IDE はこれをサポートしています。 -
必要な情報を継承クラスに提供する必要があると思われる場合は、継承されたメンバーを含めます。
-
ビルダー テンプレートの例で示したように、オブジェクトに多くのオプションおよび必須のパラメーターが含まれる場合があります。すべてのフィールドを印刷することがほぼ不可能な場合、この場合、特にオプションのフィールドがあるため、必須フィールドのみを印刷できます。
GO TO FULL VERSION