Android Studio最速入門~効率的にコーディングするための使い方

第37回 リファクタリング・カタログ

この記事を読むのに必要な時間:およそ 8 分

メソッドの戻り値をラップする(Wrap Method Return Value)

指定したメソッドの戻り値を新しいラッパークラスに置き換えるか,既存のクラスの置き換えます。

使い方
  1. エディタで対象のメソッドにカーソルを置く
  2. "Wrap Method Return Value..."を実行

図32 ⁠Wrap Return Value」ダイアログ

図32 「Wrap Return Value」ダイアログ

匿名クラスを内部クラスに変換(Convert Anonymous to Inner)

表題の通りです。

使い方
  1. 「Structureツールウィンドウ」やエディタで匿名クラスを選ぶ(エディタの場合,カーソルを置く)
  2. "Convert Anonymous to Inner..."を実行

図33 ⁠Convert Anonymous to Inner」ダイアログ

図33 「Convert Anonymous to Inner」ダイアログ

フィールドのカプセル化(Encapsulate Fields)

インスタンス変数に直接アクセスせず,getter/setterを介して行うようにします。

使い方
  1. 以下のいずれかの方法で対象を選ぶ
    • エディタの場合,フィールドそのものか,そのフィールドを含むクラスにカーソルを置く
    • 「Projectツールウィンドウ」の場合,クラスを選ぶ
    • 「Structureツールウィンドウ」の場合,フィールドを1つまたは複数選ぶ
  2. "Encapsulate Fields..."を実行

図34 ⁠Encapsulate Fields」ダイアログ

図34 「Encapsulate Fields」ダイアログ

一時的な変数をクエリに置き換える(Replace Temp with Query)

この一見意味のわからないリファクタリングは,メソッド内の変数の初期化部分を走査して,他の参照やメソッドを抽出することで不要な変数を削除します。メソッドの抽出(Extract → "Method...")にとても似ていますが,こちらは一時的な変数を削除するのが目的のようです。

使い方
  1. エディタ上で削除したい変数にカーソルを置く
  2. "Replace Temp with Query..."を実行

図35 ⁠Replace Temp with Query」ダイアログ

図35 「Replace Temp with Query」ダイアログ

コンストラクタをファクトリメソッドに置き換える(Replace Constructor with Factory Method)

表題の通りです。コンストラクタの代わりに専用のファクトリメソッドを追加し,それに置き換えます。

使い方
  1. 「Structureツールウィンドウ」やエディタでコンストラクタ定義が呼び出し部分を選ぶ(エディタの場合,カーソルを置く)
  2. "Replace Constructor with Factory Method..."を実行

図36 ⁠Replace Constructor with Factory Method」ダイアログ

図36 「Replace Constructor with Factory Method」ダイアログ

コンストラクタをビルダに置き換える(Replace Constructor with Builder)

表題の通りです。コンストラクタをビルダメソッドに置き換えます。ビルダとはリスト3のようなクラスの事です。

リスト3 ビルダの例

// 使い方
//   Foo foo = new FooBuilder().setA(10).setB(20).createFoo();
class FooBuilder {
  int a, b;

  FooBuilder setA(int a) { this.a = a; return this; }
  FooBuilder setB(int b) { this.b = b; return this; }

  Foo createFoo() { return new Foo(a, b); }
}
使い方
  1. 「Structureツールウィンドウ」やエディタでコンストラクタ定義か呼び出し部分を選ぶ(エディタの場合,カーソルを置く)
  2. "Replace Constructor with Builder..."を実行

図37 ⁠Replace Constructor with Builder」ダイアログ(クリックすると動きがわかります)

「⁠Replace Constructor with Builder」ダイアログ` &title=`図37 ⁠Replace Constructor with Builder」ダイアログ` &width=`400` />

ジェネリクス化(Generify)

ジェネリクスが適用されていないコードを解析して,ジェネリクスを適用します。

使い方
  1. ジェネリクスの適用レベルに応じて,以下の方法で対象を選ぶ
    • 「Projectツールウィンドウ」でディレクトリ,パッケージ,クラスを選択
    • 「Structureツールウィンドウ」でクラス,メソッドを選択
    • エディタでクラスやメソッドにカーソルを置くか,任意の選択範囲を指定
  2. "Generify..."を実行

図38 ⁠Generify」ダイアログ

図38 「Generify」ダイアログ

※ ディレクトリ指定できる珍しいリファクタリング

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai