2

すべての POJO クラスに toString() を追加する必要がありますか?

そのような非常に基本的な質問ですが、POJOクラスごとにn個のコードを書くことについて心配しています。

私は多くのJavaソースをたどりましたが、それらのPOJOクラスに共通するものを見つけました-

@Override
    public String toString() {
        return StringUtil.toDetailString(this);
    }

シリアライゼーションに必要ですか、それともパフォーマンスの向上などに役立ちますか?

4

4 に答える 4

5

POJO を何に使用するかによって異なります。一般に、それは確かに必須ではありません。一部のシリアライゼーション フレームワークtoString()では使用される場合がありますが、デフォルトの Java バイナリ シリアライゼーションでは使用されません。(私はこれを行うものを知りませんが、不可能ではありません。)

パフォーマンス上の利点もありません。

ただし、デバッガーまたはログ記録時に、診断目的で文字列表現を取得するために、診断上の利点潜在的にあります。これが主な用途です。toString()場合によっては、診断以外の目的で依存したい場合もありますがtoString()、通常はそれを行うときにそれについて知っています...そして通常、そのような実装はそうではありませんStringUtil.toDetailString-それはおそらく何かを生成するだけのように聞こえます-何よりも開発者を対象としたJSONのようなもの。

于 2014-05-05T10:25:08.887 に答える
5

私の経験からtoString()、ロギング フレームワークを使用するかどうかにかかわらず、インスタンスの現在の状態を出力する場合に役立つため、すべての POJO クラスにメソッドを追加することを好みます。

デフォルトのtoString()メソッドは、以下から形成された文字列を出力します。

getClass().getName() + '@' + Integer.toHexString(hashCode()).

これは 99.8% の確率で役に立ちません。通常、クラス属性の値を読み取りたいとします。そのためには、オーバーライドする必要がありますtoString()

デバッグ フレームワークの外でその状態をいつ確認したいかはわかりません。

あなた/他の誰かがあなたのインスタンスをログに記録して内容を確認した場合、オーバーライドしないとtoString()、出力は名前とハッシュのみになります。それはあまり有益ではありません。

私の知る限り、パフォーマンスの側面はまったく影響を受けません。シリアル化も (本格的なフレームワークを使用して) 影響を受けません。

IDEのソース生成機能を使用してメソッドを生成することをお勧めしtoString()ます。高速で、より詳細に制御できます。

于 2014-05-05T10:27:50.187 に答える
1

toStringから継承されたデフォルトの実装に満足している場合は、オーバーライドする必要はありませんObject。デフォルトでは、基本的にクラス名とハッシュ値が提供されます。

于 2014-05-05T10:24:56.593 に答える