質問
リード開発に私のプロジェクトもしくは採集、またはを参考にプロジェクトのtoString()の実装として"純cruft"を取人か、あるいはドラインをサポートしています。
ってそうなるお客様の表示のオブジェクトの独自のコードに変換するオブジェクトの文字列が、その答えの"あいう".
現在具体的には、のオブジェクトこのシステムにおけるグラフィック要素のような四角、円、などの現在の表現を表示すx、y、規模、範囲など---。
その人はなに?
ききがいを実装するtoString?
解決
彼らは何の害をしますか?あなたがそれらを持っている場合、なぜそれらを削除しますか?デバッグ文を発するとき、私はのtoString()非常に便利を見つけます。
個人的には、常に実行可能のtoString()メソッドを有するの側に誤ることになります。書くためにこれほど少ないの仕事ます。
他のヒント
よく書かれた取り外し(あるいは半ちゃんと書かれた)のtoString()メソッドIMO、純粋な狂気です。はい、私は頻繁に(できるだけ頻繁にオブジェクトがそれらをとにかく使用に終わるません)これらを記述するのが面倒ですが、彼らが持っている非常に便利です。
私は本当にこれらを取り除きたいのに良い理由を考えることはできません。
私はいつも私のクラスでのtoStringを実装していることを確認作りました。
これは、私がデバッグだし、私はエラーを記録していたとき、私は私のログメッセージに含めることができたときに、クラスの現在の状態をデバッグするための簡単な方法を提供しています。
私はtoString()
実装を保つと思います。それは、デバッグに来るとき、彼らは非常に貴重であり、それらは、グラフィカルコンポーネントのための優れた代替テキストのために作ることができます。
私のtoString()を慎重にオーバーライドしなければならない反対主張するだろう。デフォルトのtoString()の実装は非常に情報価値がないと基本的に役に立ちません。良いのtoString()の実装は、開発者に一目でオブジェクトの内容の非常に有用なビューを与えることができます。あなたはそこにすべてをかけるが、少なくとも重要なものする必要はないかもしれません。私はあなたのリード開発者が実際にコーディングし、「嫌なもの」を心配するのではなく、機能を追加する必要があると思います。
かみを実施するためのより複雑なオブジェクトがクライアントコードなの細粒のオブジェクトの状態ではなくケアの一部についてより人間的でわかりやすく、感作のメッセージをまとめたか、賢明な...
あのようにJavaBeansを参考にして設定クライアントコードを投げる私のオブジェクト ToStringBuilder方法 または類似のいれば、必要な低レベルのデバッグしやすくなります。
ToStringBuilder.reflectionToString(myObject);
またはクライアントのコードが呼び標準プロパティsetterかでログインもしてもらいました。
一般に、 toString()
が良います。特に、 を利用したデバッグ.
の実施 toString()
ななし 費用 や リスク.すべてのようにコード toString()
実装の維持が必要 のコードです。この手段を toString()
同クラス。例えば、フィールドを追加または削除、 toString()
アップデートされるべきものだが適切にすべきこていたという方法 hashCode()
や equals()
).
の実施 toString()
発生のリスク しています。例えば、この二つのクラスシステムにおいて参照のインスタンスその他(双方向リンク) 呼び出しの toString()
かなりスタックオーバーフローにより無限の再帰 としての toString()
実装クラスを呼び出しの toString()
の実施その他のクラスです。
システムの場合、大きな数の同期 toString()
法の手法の原因となるバグのようにスタックであふれ、その同僚に が 道理にかなった。この場合でも、 単にコメントアウトにバギー toString()
方法 してのコードです。各 toString()
方法がuncommentedの更新に対して必要なのです。
POJO
s、DTO
sおよび/または永続的なデータを保持している任意のオブジェクトのための私はいつもの自動生成ののtoString()メソッド。民間の内部プロパティのための良いログの練習は、トリックを行う必要があります。
を必ずtoStringメソッドのパスワードと[Omitted]
と他のsesitive情報に置き換えることを忘れないでくださいの(またはトップ秘密の自然の似たような)
まあ、彼はstramgeことを行います。
私はのtoString()があまりにも便利であると言うことはできません。プレゼンテーションのためには、他のツールが必要になります。
あなたは、コレクションの内容を見ることができるので、しかし、のtoString()、デバッグに非常に便利です。
私はそれが既に書かれている場合は、それを削除する理由を理解していない
私は答えはあなたのtoString()メソッドは、彼らは維持する必要がどのくらいの仕事、どのように複雑に依存だと思うし、彼らはどのくらいの頻度を使用します。ロギングのために、多くの場合、toString()を使うと仮定すると、それはこれらのメソッドを削除するにはあまり意味がありませんデバッグ。それらはほとんど使用されないと何かがあなたのコードに変更するたびを維持するために多くの作業を必要としている場合しかし、その後のtoString()メソッドの全部または一部を取り除くための有効な引数は、おそらくあります。
あなたは、これらのオブジェクトを表示するために必要とするクライアントについて何かを述べました。このことから私はあなたのコードであるか、または他の開発者が使用するライブラリやAPIのいくつかの種類が含まれている推測しています。この場合、私は非常に便利なのtoString()の実装を維持するお勧めします。あなたがログとデバッグの多くをしない場合でも、あなたのクライアントは、彼らは間違いなく彼らは自分自身を記述し、維持する必要がない便利なのtoString()メソッドを持つ認めるであろう可能性があります。
+1マイク・C
以上、デバッグのためにその有用性上記のtoString()は、インスタンスのクラスの作成者の視点を理解するための貴重なツールである。
FWIW、のtoStringの出力は、あなたが何かが真剣に間違っていたrightawayあなたが知っている(礼儀仕様のドキュメントを)見ることを期待するものと異なる場合ます。
個人的に、私はそれらを実装する(はい、日食は、デバッグフォーマッタが、toString()を簡単ですがあります)ます。
おそらく、あなたは多くのJDKクラスはtoString()を持っていることを反撃することができます。彼らは同様に除去されるべきか? ;)
私は(どちらかのログで、コンソール、または表示ツリーのいくつかの種類の)文字列表現としてのオブジェクトを表示するには、それが予想されるユースケースや要件である場合は、のtoStringを実装する必要がありだと思います。
そうでなければ、私は、開発者に同意する - あなたが何かを変更するたびに、のtoStringを破ることができます。あなたはヌルなどには注意する必要があります。
、しかし、彼らがすべて除外されなければならないことは明らかではないので、デバッグやログ記録に使用される、実際に何回もある。
私は、彼らがすでに書かれており、きちんと書かれている場合、彼らは(あなたが実際にクラスにフィールドを追加するなど)邪魔になるまで、少なくともでそれらを残していること。
jsightに同意しますデバッグのために、誰もtoString
を倒すことはできません。これは、デバッガでは、簡単なデバッグプリントの両方で実用的です。それはあなたが同様にそれらを上書きする場合は、あなたのequals
とhashCode
方法は、上のベースとされているすべてのフィールドが表示されていることを確認してください!
をエンドユーザーに表示するために、私はしかし、toString
を使用することはありません。そのために、私はそれはあなたがそれを必要とする場合は、別の適切な書式設定を行い方法、および国際化を記述する方が良いと思います。
これは良い意味になります。
これは、代わりにJakarta CommonsのラングでToStringBuilderを使用するために、あなたのチームに意味をなすことがあります:
System.out.println("An object: " + ToStringBuilder.reflectionToString(anObject));
オブジェクトをイントロスペクトし、パブリックフィールドを出力している。
ます。http://コモンズ.apache.org / LANG / API-2.3 / ORG / apacheの/コモンズ/ LANG /ビルダー/ ToStringBuilder.htmlする
私はそうすることを意味するだろうと言ってきました すべてのクライアントが表示したいこと オブジェクトは自分を記述する必要があります にオブジェクトを変換するために独自のコード 文字列が、それをして答えました。 "はい、彼らはだろう"。
このが孤立して答えることができる問題ではありません...あなたは、彼らがアイディアをどう思うか、クライアント(またはそれらを書く人)を求める必要があります。私はJavaライブラリを使用して、デバッグのためにそののtoString()のオーバーロードに頼っていた場合、ライブラリの開発者はそれらを削除することを決定した場合。
、私はむしろイライラするだろう公平を期すために、ここでは開発者言ったが、いかなる意味においても、開発者をリードしていない。
元の問題はのtoString()については、必ずしもではないが、第2の方法のparamStringに関する。 「その文字列の連結とNULL値のチェックのすべてと、のparamStringはバグ磁石である。」
http://code.google.com/p/を参照してください。 piccolo2d /問題/詳細?ID = 99 の
私は間違いなく、特にデバッグ目的のために、のtoString()の実装を続けるだろう。主にC ++開発者として、私は物事は、彼らが(演算子のオーバーロードは、痛みをすることができます)この点で、Javaであるように、C ++のように簡単なあます。
問題がある場合は、既存の toString()
実装、開発者は固定の問題です。い、現在の実装はすべて"純cruft"を除去して積極的に行ってきたことでも危ない限り、既存の toString()
方法 切り替え く書かれています。
思 強く 明の開発から取り除く機能する toString()
方法。
常に実装:)上述のように、それはデバッグのために非常に貴重である。
これは、デバッグ目的のために良いです。しかし、あなたは、あなたがのtoString()の実装を使用していないが、そのためのカスタムメソッドを提供いけエンドユーザに文字列として指定されたオブジェクトを表示したい場合。
ですからについて
私はそうすることを意味するだろうと言ってきました すべてのクライアントが表示したいこと オブジェクトは自分を記述する必要があります にオブジェクトを変換するために独自のコード 文字列が、それをして答えました。 "はい、彼らはだろう"。
私はあなたのチームのリードに同意します。あなたは、任意のクライアントを使用するカスタム実装にオブジェクトを表示したい場合。あなたは目的がtoString()を使用してデバッグするためにそれを使用したい場合。
は toString()
方法は非常に有用なデバッグ値クラスでできると主張して なに役立つ企業授業.
きっかけになるかもしれないと思の重量により現代の視点でこの問いはほぼ10年間です。
toString
が明らかに役立つデバッグメント教会があります。賑わいを見せた人気イベンその他のすべての答えがここにある明ることが デバッグ情報なビジネスロジック.
有 toString
方法のひとつひとつのクラスは視覚装を隠すのに有するクラスです。また忘れてはならないことを維持で手動や再生の方法からIDE-毎時間を変更してクラス。
ではどうしたらよいのでしこのような問題を解決するためには、方法。その答えは 自動的に作成で. プロジェクトのロンボク @ToString
注釈 で自動的に生成する toString
方法でコンパイル時を含む任意の組み合わせ分野(戦略分野)ごとに使い分けてみましょう。
基本的な使用例:
@ToString
public class Foo {
private int i = 0;
}
となる等において、以下の項目についてコンパイル時間:
public class Foo {
private int i = 0;
public String toString() {
return "Foo(i=" + this.i + ")";
}
}
私たちは、のtoString()メソッドのいずれかから放り出さConcurrentModificationExceptionを取得しているので、時折欠点があります。もちろん、それが同期されなかった場合の私たち自身のせいです。