2012-12-19 8 views
9

Object.toString()のJavaDocは言う:Java標準ライブラリがtoStringメソッドを実装していないのはなぜですか?

は、オブジェクトの文字列表現を返します。一般に、のtoStringメソッドは、このオブジェクトを「テキストで表す」文字列を返します。

それでも、非常に便利なtoString()メソッドを持つことができCollections(セット、リストなど)のような標準的なJavaクラスの多くは、それを実装する気にしないでください。この愚かさの理由はありますか?

やあ、代わりに16進数の文字列を使用したいですか? :)

EDIT:これは私のIDEの使用に失敗しました。私は実装の代わりにインターフェイスを辿り、何らかの理由で私をObject.toString()にまっすぐに連れて行きました。

+0

関連項目:http://stackoverflow.com/q/2329168/334274 – Jivings

+1

toStringを実装していないコレクションクラスはありますか。私はそれらのすべてが実装していると思う(ArrayList、HashMap、HashSet) –

+0

コレクションはutilクラスなので、私はtoStringメソッドの正当な理由はない。そのような場合JavaのCollectionインタフェースを意味するならば、すべての関数は仮想ですので、ほとんどの場合はオーバーライドされた実装からのtoStringが呼び出されます。 – gregory561

答えて

6

UPD:

あなたがCollectionのクラスを意味している場合、その答えは次のようになります。 これはそれほどではありません。多くのCollectionクラスがこのメソッドをオーバーライドします。たとえば、AbstractCollectionクラスです。このクラスは、すべての継承クラスに共通のtoString実装を持ちます。

Collection[s]を意味する場合、このクラスはプライベートコンストラクタを持ち、インスタンス化できません。特殊なtoStringメソッドは意味がありません。

+3

彼はインタフェースであるコレクションではなくutilクラスであるコレクションについて述べました。 – gregory561

+1

@ gregory561、私は恐怖です、その作者は誤植をしました。その場合、CollectionインタフェースはObjectを拡張/実装していないので、質問は意味を持ちませんか? – Andremoniy

+0

whichにはtoStringメソッドがあります。たとえそれがあったとしても、このメソッドをiterfaceに実装することは不可能です – gregory561

2

あなたがCollectionsクラスについて話しているのであれば、それはユーティリティクラスです。toString()メソッドをオーバーライドする必要はありません。一般に、ユーティリティクラスの場合、コンストラクタをprivateにして静的メソッドを提供します。

また、コンストラクタがプライベートになっているため、コレクションクラスのオブジェクトを作成できないことを確認してください。 Check java.util.Collectionssource、行番号56

関連する問題