IntelliJ IDEA 2025.1 Help

Extract Method(提取方法)

提取方法 重构允许您将可以分组的代码片段移动到一个单独的方法中,并用方法调用替换旧代码。

在提取方法时,您需要检查变量。 如果有一个输出变量,它将作为提取方法的返回值。 如果存在多个输出变量,则可能无法应用 Extract Method重构,并会出现错误消息。

在这种情况下,有几种解决方法可以让 Extract Method工作。 例如,您可以引入一个包含所有输出值的特殊 data-class。

Extract Method(提取方法)

  1. 选择您想要提取到方法的代码片段。

  2. Ctrl+Alt+M 或转到主菜单中的 重构 | 提取 | 方法

    或者,在选中代码片段时出现的 浮动工具栏上,点击 提取 并选择 方法

  3. 如果 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 类中,然后执行方法提取。

使用 Java records 提取方法
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日