LoginSignup
5
5

More than 5 years have passed since last update.

Android Studio で toString メソッドの生成をするときに、生成内容をカスタマイズする

Posted at

背景

Android Studio には toString メソッドを自動生成する機能があります。
(実行するには、メニューの Code -> Generate -> toString())

デフォルトでは下のようなコードが生成されます。不満点があります。

@Override
public String toString() {
    return "Product{" +
            "code='" + code + '\'' +
            ", category='" + category + '\'' +
            ", name='" + name + '\'' +
            '}';
}

不満点は

  • StringBuilder を使ってほしい
  • '\'' ではなく "'" を使ってほしい
  • '}' ではなく "}" を使ってほしい

手順

toString メソッドを生成するときに
下のダイアログが出ます。
ここで Settings ボタンを押します
dialog.png

すると次のような画面になりますので、
「StringBuilder (JDK 1.5)」というテンプレートをコピーして、新しいテンプレートを作成します。
template.png

テンプレートを修正していくわけですが、変更点は下の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();
}

あとは、先ほどの

dialog.png

の画面で、作成したテンプレートを選択します。

結果

生成されるコードは次のようになります。

@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

となり、全部クリアしました。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5