IntelliJ IDEA 2019.1ヘルプ

シグネチャーの変更

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

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

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

  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); } } } //Let's create a new class "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); } } } //As you see, "TimeOutException" was added. public class ExtendsMyClass extends MyClass{ @Override public void read() throws IOException, TimeOutException { super.read(); } }

最終更新日: 2019年5月13日

関連ページ:

クラス図

この機能は、Ultimateエディションでのみサポートされています。IntelliJ IDEAを使用すると、プロジェクトのパッケージにダイアグラムを生成できます。このような図は、アプリケーションの実際のクラスとメソッドの構造を常に反映しています。Umlを使い始める前に、プラグインのインストール、更新...

リファクタリングPHP

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

TypeScript のリファクタリング

この機能は、Ultimateエディションでのみサポートされています。リファクタリングは、アプリケーションの動作を変更せずにソースコードを更新することを意味します。リファクタリングはコードを堅牢にし、dryを維持しやすくします。移動リファクタリングファイルやフォルダーを移動するだけでなく、Intell...

JavaScript のリファクタリング

この機能は、Ultimateエディションでのみサポートされています。リファクタリングは、アプリケーションの動作を変更せずにソースコードを更新することを意味します。リファクタリングはコードを堅牢にし、dryを維持しやすくします。シンボルの移動リファクタリングファイルやフォルダーを移動するだけでなく、I...

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

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