シグネチャーの変更
シグネチャーの変更 リファクタリングは、メソッドシグネチャーまたはクラスシグネチャーに適用できるいくつかの変更を組み合わせたものです。
class の場合、このリファクタリングにより、クラスをジェネリクスに変換し、その型パラメーターを操作できます。 クラスのすべての呼び出し、実装、オーバーライドを自動的に修正します。
メソッドの場合 、このリファクタリングは、メソッド名の変更、パラメーターと例外の追加、削除、並べ替え、名前の変更、呼び出しの階層を通じた新しいパラメーターと例外の伝播を行うことができます。
シグネチャーを適切に変更
エディタでクラスやメソッドのパラメータを追加または編集し始めます。 IntelliJ IDEAがエディタに シグネチャーの変更 インレイヒントを表示します。

インレイヒントをクリックするか、 Alt+Enter を押します。
パラメーターを編集している場合、IntelliJ IDEA は使用方法の更新を提案します。 提案を適用するには、 次へ をクリックします。

新しいパラメーターを追加する場合、IntelliJ IDEA では、そのパラメーターのデフォルト値を追加し、使用方法を更新するように提案します。 デフォルト値を適用するには、 更新 をクリックします。

シグネチャー変更を呼び出すダイアログ
シグネチャーを変更するメソッドまたはクラスを選択します。
コンテキストメニューから (Ctrl+F6 )を選択します。
シグネチャーの変更内容に応じて開くダイアログで、適切なオプションを指定して リファクタリング をクリックします。 潜在的な変更のプレビューを表示するには、 プレビュー をクリックします。
クラスシグネチャの例
型パラメーター Param1, Param2 をクラス MyClass に追加しましょう。
文字列と整数は、それぞれ Param1 と Param2 の クラスシグネチャーの変更 ダイアログで指定されたデフォルト値です。
また、パラメーターの境界値を追加して、型パラメーターに渡すものにいくつかの制限を加えることもできます。 例: Param3 をデフォルト値 リスト と境界値 Collection で追加する

前 | 後 |
|---|---|
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) {
}
}
}
|
メソッドシグネチャの例
メソッドにパラメーターを追加し、 メソッドシグネチャーの変更 ダイアログでさまざまなオプションを指定して異なる結果を得ることができます。
メソッドに例外を追加することもできます。例外は呼び出し階層に伝播されます。

パラメーターの追加
名前 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);
}
}
}
|
パラメータを伝搬
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();
}
}
|
パラメーターの追加
赤色でハイライトされている
返却値をクリックします。Alt+Enter を押して、 parameter '<parameter_name>' の作成 を選択します。
シグネチャーの変更 ダイアログで、パラメーター設定を調整するか、提案された設定を受け入れます。
リファクタリング(R) をクリックします。
シグネチャ変更ダイアログ
項目 | 説明 |
|---|---|
名前 | 関数、メソッド、メソッド仕様の名前。 |
パラメーター | シグネチャー内のパラメーターのリスト。 パラメーター 項目では、パラメーターを使用して以下のアクションを実行することができます。
|