JavaのtoStringはオブジェクトをprintln printf、文字連結演算子、
assertなどを使い現われる時
オブジェクトの情報を表現するために自動的に呼び出されるメソッドです。
toStringをオーバーライドしていないなら
PhoneNumber @ 163b91のように
'クラス名+ @ + 16進数’に表現されます。
このtoStringは、オブジェクトを簡単に表現するために再定義するのがお勧めです。
toStringの一般規約にはこんな一節があります。
「すべてのサブクラスは、このメソッドをオーバーライドするのが望ましい。」
下はtoStringをオーバーライドする時注意すべき点です。
1. toStringメソッドは、オブジェクト内の重要情報をすべて入れて返す必要があります。
オブジェクトを表現するのに重要な情報が欠けてはいけません。
もしオブジェクトが非常に大きいか、文字列えの変換が厳しい情報を含んでいるときは
要約情報を入れて返すようにしてください。
2. toStringが返す文字列は、意図をドキュメントに残して下さい。
型を明示すると、オブジェクトの情報をすべてのユーザーが確認できますが、
自由修正できないという点で、欠点もあります。
このために「残しいたほうがいい」も「残したら悪い」も言えません。
でもtoStringが返す文字列の形式が固定だと思って
重要なコードで使用するプログラマがあるかも知れないです
toStringの戻りデータをjson解析に使用するとか、
継続的なデータの一部として保存するとか。
このような状況でtoStringの定義が変わる場合、
コードのすべてが捻じ曲げられる可能性もあります。
ため、ドキュメントに意図を書いておきます。
より良いコードの使用のため使う人に判断の手掛かりを残してください。
もし文書に「オブジェクトの内容を簡単に表現する文字列を返します。
決められた文字列はおりません。どんな形でも変わることができます。」
と明示されている場合、そのコードを使うプログラマはtoStringの戻りデータを
重要な情報として使ったりはしないはずです。
3. toStringが返す文字列に含まれる情報は、別の方法で窓口を作ってください。
toStringから返されるデータは、重要な情報です。
もしこの重要な情報を得ることができるドアがtoStringが唯一であれば、
プログラマは情報を得るためには、toStringの文字列を解析する他の方法がありません。
解析コードを使うともちろん性能は低下し、またエラーも生じやすくなります。
ためgetterのようなアクセサーを実装してtoString以外のアプローチ道を作っておいてください。
댓글 없음:
댓글 쓰기