Extract Method(提取方法)
提取方法 重构允许您将可以分组的代码片段移动到一个单独的方法中,并用方法调用替换旧代码。
在提取方法时,您需要检查变量。 如果有一个输出变量,它将作为提取方法的返回值。 如果存在多个输出变量,则可能无法应用 Extract Method重构,并会出现错误消息。
在这种情况下,有几种解决方法可以让 Extract Method工作。 例如,您可以引入一个包含所有输出值的特殊 data-class。
Extract Method(提取方法)
选择您想要提取到方法的代码片段。
按 Ctrl+Alt+M 或转到主菜单中的 。
或者,在选中代码片段时出现的 浮动工具栏上,点击 提取 并选择 方法。
如果 IntelliJ IDEA 检测到代码仅部分重复,它会建议提取一个参数以继续重构。

示例
让我们将 a+b 表达式提取到一个方法(Kotlin 中的函数)中,并替换重复的内容。
之前 | 之后 |
|---|---|
public void method() {
int a=1;
int b=2;
int c=a+b;
int d=a+c;
}
|
public void method() {
int a=1;
int b=2;
int c=add(a,b);
int d=add(a,c);
}
...
private int add(int a, int b) {
return a+b;
}
|
之前 | 之后 |
|---|---|
fun method(){
val a = 1
val b = 2
val c = a + b
val d = a + b
}
|
fun method(){
val a = 1
val b = 2
val c = add(a, b)
val d = add(a, b)
}
private fun add(a: Int, b: Int) = a + b
|
使用 Java records 提取方法
从 Java 16 版本开始,您可以使用 Java records 提取方法。 在有多个变量时,这可能会有所帮助。 在这些情况下,IDE 首先建议将这些变量包装到一个新的 record 或 bean 类中,然后执行方法提取。

class SomeClass {
public static void main(String[] args) {
int values[] = {1, 2, 3, 4, 5};
int sum = 0;
int num = 0;
for (int n : values) {
sum += n;
num++;
}
System.out.println("Sum: " + sum + " - Num: " + num);
}
}
class SomeClass {
public static void main(String[] args) {
Statistics result = getStatistics();
System.out.println("Sum: " + result.sum() + " - Num: " + result.num());
}
private static Statistics getStatistics() {
int values[] = {1, 2, 3, 4, 5};
int sum = 0;
int num = 0;
for (int n : values) {
sum += n;
num++;
}
Statistics result = new Statistics(sum, num);
return result;
}
private record Statistics(int sum, int num) {
}
}
最后修改日期: 2025年 4月 24日