IntelliJ IDEA 2020.1ヘルプ

シグネチャーの変更

シグネチャーの変更リファクタリングは、メソッドシグネチャーまたはクラスシグネチャーに適用できるいくつかの異なる変更を組み合わせています。

クラスの場合、このリファクタリングはクラスをジェネリックに変換し、その型パラメータを操作することができます。それは自動的にすべての呼び出し、実装およびクラスのオーバーライドを修正します。

メソッドの場合、このリファクタリングは、メソッド名の変更、パラメータと例外の追加、削除、並べ替え、名前の変更、および呼び出しの階層を通じた新しいパラメータと例外の伝播を行うことができます。

署名を適切に変更

  1. エディターで、クラスまたはメソッドのパラメーターの追加または編集を開始します。IntelliJ IDEAはガターに the Refactoring icon を表示します。

    In-place change signature refactoring

  2. ガターのアイコンをクリックするか、Alt+Enterを押します。

    新しいパラメーターを追加する場合、IntelliJ IDEAは、パラメーターのデフォルト値を追加し、使用箇所を更新するように要求します。

    Add default value for a parameter

    パラメータを編集している場合、IntelliJ IDEAは使用箇所の更新を提案します。

    Update usages for parameter
  3. 更新をクリックして提案を適用します。

シグネチャーの変更ダイアログを呼び出す

  1. シグネチャーを変更するメソッドまたはクラスを選択します。

  2. コンテキストメニューからリファクタリング | シグネチャーの変更Ctrl+F6)を選択します。

  3. シグネチャーの変更内容に応じて開くダイアログで、適切なオプションを指定してリファクタリングをクリックします。潜在的な変更のプレビューを表示するには、プレビューをクリックします。

クラスシグネチャーの変更の例

型パラメータ Param1, Param2 をクラス MyClassに追加しましょう。

文字列と整数は、それぞれ Param1Param2クラス・シグネチャーの変更ダイアログで指定されたデフォルト値です。

また、パラメータの境界値を追加して、型パラメータに渡すものにいくつかの制限を加えることもできます。例: Param3 をデフォルト値 List と境界値 Collectionで追加する

Change a class signature

public class MyClass { public class MyOtherClass { MyClass myClass; void myMethod(MyClass myClass) { } } }
public class MyClass<Param1, Param2, Param3 extends Collection> { public class MyOtherClass { MyClass<String, Integer> myClass; void myMethod(MyClass<String, Integer, List> myClass) { } } }

メソッドシグネチャーの変更例

メソッドにパラメータを追加し、メソッド・シグネチャーの変更ダイアログでさまざまなオプションを指定して異なる結果を得ることができます。

また、メソッドに例外を追加することもできます。これらの例外は、呼び出し階層で伝播されます。

Change a method signature

パラメーターの追加

名前 price、タイプ double、およびデフォルト値 0.0を持つパラメーターを追加しましょう。

IntelliJ IDEAは、メソッドにパラメータを追加し、メソッド呼び出しを更新し、デフォルトのパラメータ値を指定します。

public class MyClass { public void myMethod(int value) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } }
public class MyClass { public void myMethod(int i, double price) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1, 0.0); } } }

任意の変数を使用する

すべてのメソッド呼び出しを更新し、メソッド呼び出しの近くで適切な型の変数を探し、それをメソッドに渡しましょう。これを達成するには、任意の変数を使用するオプションをチェックします。

結果として、IntelliJ IDEAは新しいパラメータと同じ型を持つ変数dを見つけ、それをメソッド呼び出しで使用します。

public class MyClass { public void myMethod(int value) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } }
public class MyClass { public void myMethod(int i, double price) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1, d); } } }

オーバーロードメソッド

IntelliJ IDEAにメソッド呼び出しを変更せずに保存し、新しいシグネチャーでメソッドを呼び出す新しいオーバーロードメソッドを作成してみましょう。これを達成するには、オーバーロード・メソッドによる委譲オプションを使用します。

新しいオーバーロードメソッドには古いシグネチャーがあることに注意してください。ただし、新しいシグニチャを使用してメソッドを呼び出します。リファクタリングを実行するときに、0.0 がデフォルトのパラメータ値として指定されました。

public class MyClass { public void myMethod(int value) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } }
public class MyClass { public void myMethod(int i) { myMethod(i, 0.0); } public void myMethod(int i, double price) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } }

パラメーターの伝播

propagateParameters Alt+G を呼び出しメソッド myMethodCall()を介してメソッド呼び出しに新しいパラメーターに伝播しましょう。

その結果、新しいパラメータ price は、呼び出し元のメソッドを介してメソッド呼び出しに伝播し、それに応じてメソッド呼び出しを変更します。

public class MyClass { public void myMethod(int value) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } }
public class MyClass { public void myMethod(int i, double price) { } public class MyOtherClass { public void myMethodCall(MyClass myClass, double price) { double d = 0.5; myClass.myMethod(1, price); } } }

例外の伝播

クラス MyClassに例外 IOException をスローするメソッド read を追加しましょう。

次に、MyClass を拡張し、元の read メソッドをオーバーライドする新しいクラス ExtendsMyClass を作成しましょう。

今度は MyClass に戻って、このリファクタリングによって TimeOutException などの別の例外を追加すると、メソッド read もサブクラスに更新されます。

public class MyClass { public void read() throws IOException { } public void myMethod(int value) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } } ExtendsMyClass". public class ExtendsMyClass extends MyClass { @Override public void read() throws IOException { super.read(); } }
public class MyClass { public void read() throws IOException, TimeOutException { } public void myMethod(int value) { } public class MyOtherClass { public void myMethodCall(MyClass myClass) { double d = 0.5; myClass.myMethod(1); } } } ion" was added. public class ExtendsMyClass extends MyClass { @Override public void read() throws IOException, TimeOutException { super.read(); } }
最終更新日: 2020年5月25日

関連ページ:

PHPコードのリファクタリング

リファクタリングは、アプリケーションの動作を変更せずにソースコードの構造を更新することを意味します。リファクタリングはコードを堅牢にし、dryを維持しやすくします。シグネチャーの変更:エディターで、シグネチャーを変更するメソッドの名前の中にカーソルを置きます。を押します。または、メインメニューまたは...

TypeScript のリファクタリング

リファクタリングは、アプリケーションの動作を変更せずにソースコードを更新することを意味します。リファクタリングはコードを堅牢にし、dryを維持しやすくします。移動リファクタリング:ファイルやフォルダーを移動するだけでなく、IntelliJ IDEAではTypeScriptの最上位シンボルを移動できま...

JavaScript のリファクタリング

リファクタリングは、アプリケーションの動作を変更せずにソースコードを更新することを意味します。リファクタリングはコードを堅牢にし、dryを維持しやすくします。シンボルの移動リファクタリング:ファイルやフォルダーを移動するだけでなく、IntelliJ IDEAではJavaScriptのトップレベルのシ...

コードリファクタリング

リファクタリングは、新しい機能を作成せずにソースコードを改善するプロセスです。リファクタリングはコードを堅牢にし、dryを維持しやすくします。リファクタリングを呼び出す:リファクタリングするアイテムを選択します。エディターでプロジェクトツールウィンドウまたは式/シンボルでファイル/フォルダーを選択で...