変数の抽出 / 導入
理解しにくい式や、コード内の複数の場所で重複している式に遭遇した場合、 変数の導入リファクタリング(Ctrl+Alt+V )を使用すると、そのような式の結果またはその一部を、より単純で理解しやすい別の変数に配置することで、これらの問題に対処できます。 さらに、コードの重複も削減されます。
Java 1.8 以降のバージョンでは、IntelliJ IDEA を使用して 関数型の型変数を抽出することもできます。
お使いの Java バージョンが パターンマッチング(英語)をサポートしており (Java 14 プレビュー以降)、 instanceof チェックでキャスト式を抽出している場合、IntelliJ IDEA は、通常のローカル変数ではなく、その instanceof チェックでパターン変数を導入することがあります。 また、Java 14 バージョン以降では、パターン変数をインライン化できます。 この場合、すべての出現箇所が古いスタイルのキャスト式に置き換えられます。
変数の導入リファクタリングを使用して、可変個引数を新しいスライス変数に抽出できます。
エディターで、抽出する式またはその一部を選択します。 また、キャレットを式内に置くこともできます。この場合、IntelliJ IDEAが潜在的なコード選択のリストを提供します。
Ctrl+Alt+V を押すか、メインメニューで に移動します。
または、表示される ツールバーで 抽出 をクリックし、 変数 を選択します。
IntelliJ IDEA では、追加のオプションを構成するために使用できる変数の横に
も表示されます。

IntelliJ IDEA で複数の出現箇所が見つかった場合は、スコープを指定して、見つかった出現箇所のすべてではなく一部だけを抽出できます。

ポップアップで提案された名前を選択するか、独自の名前を入力して Enter を押します。

また、
finalとして抽出する変数を宣言することもできます。既存の変数を新しい変数に再割り当てする場合は、 Ctrl+Alt+V を押します。 既存の変数が複数ある場合、IntelliJ IDEA は選択できるリストを表示します。
Shift+Tab を押すと、変数の型を変更できます。

デフォルトでは、この抽出リファクタリングはエディターで適用されます。 モーダル経由でリファクタリングを適用するように設定を変更するには、 設定 ダイアログ (Ctrl+Alt+S) を開き、 エディター | コード編集 に移動して、 リファクタリング 領域で モーダルダイアログ内 を選択します。
サンプル
コード全体で 2 回発生する anotherClass.inValue() 変数を抽出し、 個数 という名前を付けてみましょう。
前 | 後 |
|---|---|
public void method() {
int a = 1;
...
int b = a + anotherClass.intValue();
int c = b + anotherClass.intValue();
}
|
public void method() {
int a = 1;
...
int number = anotherClass.intValue();
int b = a + number;
int c = b + number;
}
|
前 | 後 |
|---|---|
func method() {
val a = 1
val b = a + anotherClass!!.intValue()
val c = b + anotherClass!!.intValue()
}
|
func method() {
val a = 1
val number = anotherClass!!.intValue()
val b = a + number
val c = b + number
}
|
関数型変数を抽出する
このリファクタリングにより、Java 1.8 以降のバージョンの関数式と古いバージョンの Java の匿名クラスが作成されます。
この例では、コードフラグメントを
printlnメソッドの引数として選択します。
メインメニューで へ移動します。
IntelliJ IDEA は 関数型変数の導入 ダイアログを開きます。
または、エディターのコンテキストメニューから Ctrl+Alt+Shift+T を選択し、 関数型変数 を選択します。

この例のように、選択したコードがインスタンスフィールドに依存している場合、 フィールドをパラメーターとして渡す チェックボックスが表示され、フィールドの代わりにパラメーターを渡すことができます。

ただし、たとえば、選択したコードフラグメントがローカル変数またはパラメーターに依存する場合

対応するエントリがリストに表示されます。

ダイアログ内のいずれかのパラメーターの選択を解除すると、対応するローカル値が代わりに使用されます。

オプションを設定し、 OK をクリックします。
ポップアップから適切な機能インターフェースを選択します。

必要に応じて、リストで提案された名前を使用しない場合は、抽出された変数の名前を変更します。

IntelliJ IDEA は、さらに使用できるラムダを作成します。

サンプル
前 | 後 |
|---|---|
import java.util.List;
public class PrintAction implements Runnable {
private List<String> data;
public PrintAction(List<String> data) {
this.data = data;
}
public void run() {
System.out.println("Data: " + data.toString());
}
}
|
import java.util.List;
import java.util.function.Function;
public class PrintAction implements Runnable {
private List<String> data;
public PrintAction(List<String> data) {
this.data = data;
}
public void run() {
Function<List<String>, String> presenter = (p) -> "Data: " + p.toString();
System.out.println(presenter.apply(data));
}
}
|