IntelliJ IDEA 2020.3 ヘルプ

移動リファクタリング

コピーリファクタリングでは、別のパッケージにクラスのコピーを作成できます。また、ファイル、ディレクトリ、またはパッケージのコピーを別のディレクトリまたはパッケージに作成することもできます。

コピーを実行するリファクタリング

  1. リファクタリングする識別子(エディター内のクラスまたはプロジェクトツールウィンドウ内のファイルなど)を選択します。

  2. リファクタリング | コピー F5 を選択

  3. コピーウィンドウで、コピーの名前と場所を指定し、OK をクリックします。

移動リファクタリングを使用すると、プロジェクトのソースルート間でパッケージとクラスを移動し、クラスメンバーを他のクラスに移動し、内部クラスを上位階層レベルに移動できます。
例: メソッドまたはフィールドがそれ自体のクラスよりも別のクラスで多く使用されている場合は、メソッドまたはフィールドで移動リファクタリングを実行できます。

移動を実行するリファクタリング

  1. リファクタリングする識別子を選択します。

  2. リファクタリング | 移動を選択します(または F6 を押します)。

  3. リファクタリング用に選択した項目に応じて開くダイアログで、適切なオプションを指定し、リファクタリング(パッケージの場合は OK)をクリックします。可能であれば、プレビューをクリックして、潜在的な変更をプレビューすることもできます。

  4. ターゲットディレクトリへのパス、ファイル名、パッケージ名を指定します。

静的メソッドを別のクラスに移動する

  1. エディターでクラスを開き、移動する静的メソッドにキャレットを置き、F6 を押します。

  2. メンバーの移動ダイアログで、次のオプションを指定します。

    • 別のクラスに移動するメンバー (static のみ) フィールドで、別のクラスに移動するメソッドの横にあるチェックボックスをオンにします。このリストには、現在のクラスで検出されたすべての静的メソッドが表示されます。

    • メンバーをクラスに移動するフィールドに、メソッドのリストで選択したメンバーを移動するクラスの完全修飾名を入力します。Ellipsis アイコンをクリックすると、既存のクラスを選択または検索できます。

    Move members dialog

  3. リファクタリングをクリックするか、プレビューをクリックして実際のリファクタリングの前に結果を確認します。

インスタンスメソッドを別のクラスに移動する

このメソッドにプロジェクトの型パラメーターがある場合は、インスタンス(非静的)メソッドを別のクラスに移動できます。それ以外の場合は、まずこのメソッドを static にする必要があります。

Message on moving an instance method without a type parameter
  1. エディターで、インスタンスメソッドにキャレットを置き、F6リファクタリング | 移動)を押します。

  2. 開いているインスタンスメソッドの移動ダイアログで、次を指定します。

    • インスタンス式を選択するリストで、インスタンスメソッドを移動するターゲットクラスを選択します。潜在的な移動ターゲットのリストには、現在のクラスのメソッドパラメーターのクラスとフィールドのクラスが含まれます。

    • 可視性領域で、ターゲットメソッドの優先度の変更を選択します。

    • "パラメーター参照" を置き換えるパラメーター名クラス <class_name> へフィールドに、パラメーターの希望の名前を入力します。リファクタリングが実行されると、移動されるメソッドのパラメーターが追加され、現在のクラスへのすべてのパラメーター参照が置き換えられます。

    Move instance method dialog

  3. リファクタリングをクリックするか、プレビューをクリックして実際のリファクタリングの前に結果を確認します。

インスタンスメソッドの例

getName インスタンスメソッドを Test クラスから Car クラスに移動しましょう。

import java.lang.reflect.InvocationTargetException; public class Test { public static void main(String[] args) throws Exception { Car c= new Car(); System.out.println(c.getName(new Test())); } } class Car { String name = "Default Car"; Car() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { } String getName(Test anotherObject){ System.out.print(anotherObject.toString()); return this.name; } }
import java.lang.reflect.InvocationTargetException; public class Test { public static void main(String[] args) throws Exception { Car c= new Car(); System.out.println(new Test().getName(c)); } String getName(Car car){ System.out.print(toString()); return car.name; } } class Car { String name = "Default Car"; Car() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { } }