辞書: Java: toString()に頼ってはいけない

投稿日:

何が悩みか

例えば、文字列をValueObjectの考え方で、 オブジェクトとして扱いたい場合があります。 以下のようなコードです。

public class ItemCode {
  private final String itemCode;

  public ItemCode(String itemCode) {
    this.itemCode = itemCode;
  }
}

このようなときに、元のitemCodeを取得したい場合に、 どちらを選ぶかというのが悩みでした。

  1. getItemCode()
  2. itemCode()
  3. toString()

結論としては、2番のitemCode()のような形式を選ぶのが 良いという認識です。

理由

一番の理由は、少なくともEclipseに関して言えば、 toString()は色々とめんどくさいからです。

なぜかというと、toString()を使うと、 呼び出し元を探すのに苦労するからです。 toString()は、Objectクラスで定義されているため、 全てのオブジェクトで使用可能です。

そのため、toString()から呼び出し元を見つけるのが困難です。 他のIDEだと分かりませんが、少なくともEclipeでは駄目でした。 なので、toString()はログ以外では呼ばない方がいいです。

toStringはCommons LangのToStringBuilderクラスを用いて、 自オブジェクトの中身を表示するのが最も分かりやすいと思います。 実際は+などで暗黙的にtoString()が呼ばれるため、 「toString()を明示的に呼ばない」と決めてしまえば楽です。

形式を明示しないと書く

Effective Javaの「項目10 toStringを常にオーバーライドする」には、 以下のように書かれています。

もし、形式を明示しないと決めたのであれば、 ドキュメンテーションコメントは、次のように書かれるべきです。

その後にJavadocコメントの例がありますが、 「変更されることがあります」と書いておけばよいかと思います。

親セクション


ページトップへ戻る