まくまくJavaノート
toString を常にオーバライドする
2016-05-16

toString メソッドのオーバライド

Object#toString のデフォルト実装は下記のようになっています。

public String toString() {
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
}

つまり、下記のようなテキスト表現が返されます。

MyObject@39fd27ca

ただし、このデフォルト実装は、人にとって見やすく、記述的な表現になっていないため、toString は常にオーバライドして、オブジェクトの保持する情報を適切なテキスト表現に加工して返すように実装する必要があります。

Android Developers のサイトでは、デバッグ用途であれば、例えば下記のように実装しておけばよいという指針が示されています。

@Override public String toString() {
    return getClass().getName() + "[" +
        "primitiveField=" + primitiveField + ", " +
        "referenceField=" + referenceField + ", " +
        "arrayField=" + Arrays.toString(arrayField) + "]";
}

toString メソッドの Javadoc ドキュメンテーションコメントに関して

toString メソッドの Javadoc コメントを記述するときに、どのようなテキストが返されるかの例を含めると親切です。 ただし、toString が返すテキストのフォーマットは、オブジェクトのフィールドが追加/削除されるごとに変化するので、それはあくまで例であって、フォーマットは変更される可能性があること、パースして情報を抽出したりしないこと、などを記載しておくのがよいでしょう。

2016-05-16