シグネチャーの変更
シグネチャーの変更リファクタリングは、メソッドシグネチャーまたはクラスシグネチャーに適用できるいくつかの異なる変更を組み合わせています。
クラスの場合、このリファクタリングはクラスをジェネリックに変換し、その型パラメーターを操作することができます。それは自動的にすべての呼び出し、実装およびクラスのオーバーライドを修正します。
メソッドの場合、このリファクタリングは、メソッド名の変更、パラメーターと例外の追加、削除、並べ替え、名前の変更、呼び出しの階層を通じた新しいパラメーターと例外の伝播を行うことができます。
署名を適切に変更
エディターで、クラスまたはメソッドのパラメーターの追加または編集を開始します。IntelliJ IDEA はガターに
を表示します。
- ガターのアイコンをクリックするか、Alt+Enter を押します。
新しいパラメーターを追加する場合、IntelliJ IDEA は、パラメーターのデフォルト値を追加し、使用箇所を更新するように要求します。
パラメーターを編集している場合、IntelliJ IDEA は使用箇所の更新を提案します。
更新をクリックして提案を適用します。
シグネチャー変更を呼び出すダイアログ
シグネチャーを変更するメソッドまたはクラスを選択します。
コンテキストメニューから
(Ctrl+F6)を選択します。シグネチャーの変更内容に応じて開くダイアログで、適切なオプションを指定してリファクタリングをクリックします。潜在的な変更のプレビューを表示するには、プレビューをクリックします。
クラスシグネチャーの変更の例
型パラメーター Param1, Param2
をクラス MyClass
に追加しましょう。
String and Integer are default values that were specified in the クラスシグネチャーの変更 dialog for Param1
、Param2
respectively.
また、パラメーターの境界値を追加して、型パラメーターに渡すものにいくつかの制限を加えることもできます。例: Param3
をデフォルト値 List
と境界値 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();
}
}
|
関連ページ:

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

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

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

コードリファクタリング
リファクタリングは、新しい機能を作成せずにソースコードを改善するプロセスです。リファクタリングを使用すると、コードをdryで確実に維持でき、保守も容易になります。リファクタリングの呼び出し :リファクタリングするアイテムを選択します。エディターでプロジェクトツールウィンドウまたは式 / シンボルでフ...