背景
Android Studio には toString
メソッドを自動生成する機能があります。
(実行するには、メニューの Code -> Generate -> toString())
デフォルトでは下のようなコードが生成されます。不満点があります。
@Override
public String toString() {
return "Product{" +
"code='" + code + '\'' +
", category='" + category + '\'' +
", name='" + name + '\'' +
'}';
}
不満点は
-
StringBuilder
を使ってほしい -
'\''
ではなく"'"
を使ってほしい -
'}'
ではなく"}"
を使ってほしい
手順
toString
メソッドを生成するときに
下のダイアログが出ます。
ここで Settings ボタンを押します
すると次のような画面になりますので、
「StringBuilder (JDK 1.5)」というテンプレートをコピーして、新しいテンプレートを作成します。
テンプレートを修正していくわけですが、変更点は下の2点です。
-
'\''
ではなく"'"
を使うように修正 -
'}'
ではなく"}"
を使うように修正
テンプレート全体は以下のとおりです。
public java.lang.String toString() {
final java.lang.StringBuilder sb = new java.lang.StringBuilder("$classname{");
#set ($i = 0)
#foreach ($member in $members)
#if ($i == 0)
sb.append("##
#else
sb.append(", ##
#end
#if ($member.string)
$member.name='")##
#else
$member.name=")##
#end
#if ($member.primitiveArray || $member.objectArray)
.append(java.util.Arrays.toString($member.name));
#elseif ($member.string)
.append($member.accessor).append('\'');
#else
.append($member.accessor);
#end
#set ($i = $i + 1)
#end
sb.append('}');
return sb.toString();
}
あとは、先ほどの
の画面で、作成したテンプレートを選択します。
結果
生成されるコードは次のようになります。
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Product{");
sb.append("code='").append(code).append("'");
sb.append(", category='").append(category).append("'");
sb.append(", name='").append(name).append("'");
sb.append("}");
return sb.toString();
}
というわけで、結果を確認すると、
項目 | 結果 |
---|---|
StringBuilder を使ってほしい |
OK |
'\'' ではなく "'" を使ってほしい |
OK |
'}'ではなく "}"` を使ってほしい |
OK |
となり、全部クリアしました。