質問
もちろん、その用のプリミティブの.もいかない場合は、すべての実装を見ているだけで使用からプログラマ視点です。
編集:理解していることになっていのオーバーライドのデフォルトの行動、そして実装:).たくさんの価値をオーバーで一部の部品が必要な文字列表現内です。しかし、JDKでは、少なくともい ロット の実装だけでも使用でき必要なときにいつでもデバッグのオブジェクトインスタンス.
なぜいつオブジェクトのクラスでだけるように有のためのGUI/デバッグのもの?については、その使いいの?
解決
のtoString()が便利です。当然それは、デバッグ目的のために起こるだけでなく、ユーザに操作の出力結果に有効であることができる。
たとえば、あなたが複素数を扱う複雑なクラスを持っているとしましょう。あなたがの2I の3 +のような形式でユーザーにそれらをプリントアウトしたい場合、彼らはのtoStringを(定義する場合は、フォーマットを毎回記述する必要はありませんし、出力がされるように、それは)便利です一貫性のあります。あなたはその表現を変更したい場合は、の3 + 2J のにたとえば、あなただけの複雑なクラスにtoString()メソッドをタッチする必要があります。
だから、のtoString()もデバッグ目的のためではなく、あなたのオブジェクトの一貫性のある文字列表現を得るための良い方法です。
他のヒント
いいえ、キーは、あなたがそれを便利にするためにToString()
のデフォルトの実装をオーバーライドすることになっているということです。 ToString()
はバックUIに何かの値を出力する素晴らしい方法することができます。
簡単な例は次のようになります。例えば、「姓、ミドル」
:あなたはUIのためにそれをフォーマットToString()
メソッドを持つことができます。
または演算保存するクラス(左の値= 2、右= 3、= 6およびオペレータ列挙=乗算の結果)。 "= 6 2 * 3" を取得するためにToString()
を呼び出します。
がの、.NET To<qualifier>String()
クラスのような異なるDateTime
方法、さまざまなを持っているためにおそらくより一般的です。 (ToShortDateString()
、ToLongDateString()
、ToLongTimeString()
、...)
編集:Object
はの何でものための有効な操作ですので、それはToString()
クラスに根付いている理由としては、それは単にです。
また、文字列は、データ型またはデータ、消費者の間でマーシャリングの良い方法することができます
私の個人的な好みは にデバッグする以外の目的では使用しないでくださいというのtoString()です。あなたがオブジェクトの文字列を生成したい場合は、はっきりと自分の意思(のgetName()、のgetDescription()など)を文書化する別の方法を提供します。 ()のtoStringの実装に依存していることはありません。
問題は、多くの開発者は、デバッグレベルの文字列としてのtoString()を参照して(新しいフィールドが追加または削除されたときに言う)それを変更するのは何も考えていないということです。ヘック、いくつかの自動化のtoString()ビルダーは、フィールドからのtoString()を生成するためにリフレクションを使用します。
私はこの設定がうまく長年にわたって私を務めていることがわかりました。
私が言えることは、私はいくつかの追加のデバッグ情報を表示するには、私のクラスののtoStringを変更したときに、私はコードブレークがあったということです。
問題のコードは、いくつかの内部のこと(それは数年前だった...私はそれが正確に何であったかを忘れて)としてのtoStringの値を使用することにしましたGUIライブラリました。最終的な結果は、私はもうそのライブラリを使用していないということでした。
私が言うその人の大規模なグループは、そこから返された値を利用することは問題であることを(関係なく、それはあなたがそれをするために使用されるべきだと思うもののあなたの意見の)デバッグに使用されているなどのtoStringを参照してくださいので、プログラム的な何かを(のようなそれを解析)、またはユーザーにそれを表示します。
あなたはtoStringメソッドの制御には100%であれば、その後、すべての手段によって、あなたがやりたいです。
だから、質問に答えるために、何のtoStringは、あなたがそれで欲しいものを行うことができます、だけでなく、デバッグに有効ではありません。あなたが不幸にする方法のtoStringが変化した場合しかし、驚かないでください。
私の経験では、のtoString()デバッグとロギングの外にはほとんど価値があります。あなたは、それは、時間をかけて人間が読めるもの以外ので、他の形式や内容だが、(例えば、プリミティブオブジェクト型など)のオブジェクトの最も簡単な以外の何のためにそれに依存しないに依存することはできません。複数のデータ・メンバが存在する場合、それらは経時的タイプ又は数に変更することができる期待し、のtoStringの出力()それに沿って
私は強くしたいと思いますもう一つのポイント。あなたのtoStringに他のメソッドをコールしないでください()。デバッガでブレークポイントで変数の内容を確認するよりも悪い何、そして、より多くのコードを有する(なぜならのtoStringのメソッド呼び出しの実行)。
私はそれが「のtoString」、小文字の「t」を気づか一般のJavaについて話している言及答えた人を指摘することは重要だと思うと言及「ToStringメソッド」と答えた人は、一般のC#を参照しています。もちろん、これは、応答のすべてに適用されません。
私自身の観察では(私は両方の日常を使用)、C#でのプログラマは、有益なテキスト表現を表示するには、「ToStringメソッド」をオーバーライドすることが推奨されています。一方で、Javaで、私はほぼ同じくらいこれは表示されません。実際に、私はめったにこれを見ていない。
-jp
第一に、 toString
メソッドは返却についての、人間が読むのテキスト表現のオブジェクトです。
この問題であっ 有効なJava として 項10:常にオーバーライド toString
.
この参照の Java APIの仕様 のための Object.toString
方法:
の簡潔な 情報表現とは 簡単のための人を読み込みます。
以外のデバッグを上書きする toString
法のクラスで行うことができadingオブジェクト JList
または JTable
, は、デフォルトの利用 toString
方法で表示するオブジェクトとしてテキスト形式一覧には表に示す。
例えば、私の場合、私はインドネシアでの toString
方法のオブジェクトの追加 JList
そのユーザを確認できるようにな情報のリストの項目を通す。
いがある場合に toString
方法が有る場合以外のデバッグしやすくなります。の鍵は、 toString
メソッドの戻り値ある情報を実際に有用な人は見ないデフォルトの Object.toString
実装はオブジェクトのメモリ位置することがあるテキスト表現。
に役立つ
- Gui(複合施設ご利用の際はPropertyGrid、ヘッダのテキスト)
- DataBinding(私の方法で作)
その他の文字列を出力します。
のToString()文字列へのうち任意のオブジェクトを印刷する際にも暗黙的に、.NETフレームワークによって呼び出されます。
Console.WriteLine("My Object is" + object.ToString());
タグに相当します
Console.WriteLine("My Object is" + object);
のToString()が暗黙的に呼び出されるのでます。
私は、それが対象の「価値」のためにデバッガによって使用されていることを、確認していないけれども、信じています。限られたが、これは、かなり便利です。ほとんどの場合、独自のデバッガビジュアライザを書くことは良いアイデアでしょう。
AS3で、Iは、1次元配列に2次元配列に変換しなければなりませんでした。最速(走行速度)と最も簡単な(コーディング時)ソリューションでした。
var new1DArray:Array = the2DArray.toString().split(",");
びっくりするが、あまりにも、実際に意図したとおりに機能し、非常に高速です!
IはToStringメソッド()日時フォーマットのトンを使用します。
さておき、誰もが他のすでに()ToStringメソッドをオーバーライドし、言ったことからも便利です。たとえば、コンボボックス:
myComboBox.Items.Add(new MyClass());
// now, whatever ToString() returns is shown in the
// ComboBox, but you can get the object back by through
// the SlectedItem property.
それは「意図」の使用ではないかもしれませんが、私は、データのシリアル化のためにそれを使用しました。
storeToHardDrive(studentList.ToString());