インライン化
インライン化リファクタリングを使用すると、メソッド、コンストラクター、パラメーター、スーパークラス、匿名クラス、クロージャー (Swift の場合) の抽出リファクタリングを反転させることができます。
Java 14 バージョン以降、パターン変数をインライン化できます。この場合、すべての出現箇所が古いスタイルのキャスト式に置き換えられます。
インライン化するコードフラグメントにキャレットを配置します。
Ctrl+Alt+N を押します。または、コードフラグメントを右クリックして、
メニューに移動します。必要なインラインリファクタリングを選択します。インライン化ダイアログで、インライン化オプションを指定します。
プレビューと変更の適用
サンプル
変数のインライン化
変数のインライン化リファクタリングは、冗長な変数の使用をイニシャライザーに置き換えます。
前 | 後 |
---|---|
public void method() {
int number = anotherClass.intValue();
int b = a + number;
}
|
public void method() {
int b = a + anotherClass.intValue();
}
|
public void method() {
AnotherClass.InnerClass aClass = anotherClass.innerClass;
int a = aClass.i;
}
|
public void method() {
int a = anotherClass.innerClass.i;
}
|
メソッドのインライン化
メソッドのインライン化は、メソッドの本体を呼び出し元の本体に配置します。
前 | 後 |
---|---|
public void method() {
int c=add(a,b);
int d=add(a,c);
}
private int add(int a, int b) {
return a+b;
}
|
public void method() {
int c= a + b;
int d= a + c;
}
|
public ArrayList method() {
String[] strings = {"a","b","c"};
ArrayList list=add(strings);
return list;
}
private ArrayList add(String[] strings) {
ArrayList list = new ArrayList();
for (int i=0; i< strings.length; i++)
{list.add(strings[i]);}
return list;
}
|
public ArrayList method() {
String[] strings = {"a","ab","abc"};
ArrayList list1 = new ArrayList();
for (int i=0; i< strings.length; i++)
{list.add(strings[i]);}
ArrayList list = list1;
return list;
}
|
インラインコンストラクター
インラインコンストラクターは、コンストラクターのうちの 1 つが別のものの特殊ケースである場合、コンストラクターのチェーンを圧縮することを可能にします。
前 | 後 |
---|---|
public class Class {
public int varInt;
public Class() {
this(0);
}
public Class(int i) {
varInt=i;
}
public void method() {
Class aClass=new Class();
...
}
}
|
public class Class {
public int varInt;
public Class(int i) {
varInt=i;
}
public void method() {
Class aClass=new Class(0);
...
}
}
|
インラインスーパークラス
インラインスーパークラスリファクタリングによって、スーパークラスのメソッドが使用されているクラスにプッシュされ、スーパークラスが削除されます。
前 | 後 |
---|---|
public class Bar {
...
int calculations1() { ... }
int calculations2() { ... }
}
class Foo extends Bar {
int someMethod() {
...
if (something > calculations1()) {
...
return calculations2();
}
...
}
}
|
class Foo {
...
int someMethod() {
...
if (something > calculations1()) {
...
return calculations2();
}
...
}
int calculations1() {...}
int calculations2() {...}
}
|
匿名クラスにインライン化
匿名クラスにインライン化リファクタリングにより、冗長クラスをそのコンテンツに置き換えることができます。Java 8 以降、インライン化された匿名クラスは自動的にラムダに変換できます。
前 | 後 |
---|---|
import java.util.*;
public class Main {
public class MyComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return 0;
}
}
void sort(List<String> scores) {
scores.sort(new MyComparator());
}
}
|
import java.util.*;
public class Main {
void sort(List<String> scores) {
scores.sort((s1, s2) -> 0);
}
}
|
パラメーターのインライン化
パラメーターのインライン化リファクタリングを使用すると、パラメーターの使用箇所をメソッド呼び出しの引数の値に置き換えることができます。
前 | 後 |
---|---|
public class HelloWorld {
public static void main(String[] args) {
int score = getScore(5);
System.out.println("Score: " + score);
}
public static int getScore(int base) {
return base * 10;
}
}
|
public class HelloWorld {
public static void main(String[] args) {
int score = getScore();
System.out.println("Score: " + score);
}
public static int getScore() {
return 5 * 10;
}
}
|
関連ページ:

変数の抽出 / 導入
理解しにくい式に遭遇した場合、またはコード内の複数の場所で式が重複している場合、変数の導入リファクタリングを使用すると、そのような式の結果またはその一部を、より複雑ではなく理解しやすい別の変数に配置することで、これらの問題に対処できます。さらに、コードの重複も削減されます。Java 1.8 以降のバージョンでは、IntelliJ IDEA を使用して関数型変数を抽出することもできます。お使いの Java バージョンがパターンマッチングをサポートしており (Java 14 プレビュー以降)、チェ...

コードの重複を検索して置換
コードの重複を検索して置換アクションを使用すると、選択したメソッドまたは定数フィールドに似たコードの繰り返しを見つけ、元のメソッドまたは定数への呼び出しで置き換えることができます。また、検索範囲を指定することもできます。重複を検索するメソッドまたは定数フィールド内にキャレットを置きます。メインまたはコンテキストメニューからを選択します。開いたダイアログで、IntelliJ IDEA がコードの重複を検索するスコープを選択します。見つかったコードの複製ごとに、IntelliJ IDEA は交換の確...