IntelliJ IDEA 2025.3 Help

提取/引入变量

如果您遇到难以理解的表达式,或者该表达式在代码中的多个位置重复出现, 提取变量重构 Ctrl+Alt+V 可以帮助您解决这些问题,将该表达式或其中一部分的结果放入一个更简单、更易于理解的独立变量中。 另外,它减少了代码重复。

从 Java 1.8 及更高版本开始,IntelliJ IDEA 还允许您 提取一个功能类型变量

如果您的 Java 版本支持 模式匹配 (Java 14 预览版或更高版本),并且您正在提取 instanceof 检查下的强制转换表达式,IntelliJ IDEA 可能会在该 instanceof 检查中引入一个模式变量,而不是普通的局部变量。 此外,您可以从 Java 14 版本开始内联模式变量。 在这种情况下,所有用法都将替换为旧式强制类型转换表达式。

您可以使用 引入变量重构将可变参数提取为新的切片变量。

  1. 在编辑器中,选择您要提取的表达式或其一部分。 您还可以将文本光标放在表达式内,在这种情况下,IntelliJ IDEA 会为您提供一个潜在代码选择列表。

  2. Ctrl+Alt+V 或转到主菜单中的 重构 | 提取/引入 | 变量

    或者,在出现的 工具栏 上,单击 提取 并选择 变量

    IntelliJ IDEA 还会在变量旁边显示 齿轮图标 ,您可以使用它来配置更多选项。

    更多选项

    如果 IntelliJ IDEA 找到多个匹配项,您可以指定范围,仅提取找到的部分匹配项,而不是全部。

    引入变量出现范围
  3. 在弹出窗口中选择一个建议的名称或输入自己的名称,然后按 Enter

    提取变量

    您还可以将您提取的变量声明为 final

    如果您想要将现有变量重新分配给新的变量,请按 Ctrl+Alt+V。 如果您有多个现有变量,IntelliJ IDEA 将显示一个供选择的列表。

    您可以按 Shift+Tab 来更改变量的类型。

    将变量声明为 final

默认情况下,此提取重构将在编辑器中应用。 要更改您的设置以通过 模态窗口应用重构,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 | 代码编辑 ,并在 重构 区域选择 在模态对话框中

示例

我们来提取代码中两次出现的 anotherClass.inValue() 变量并为其命名 number

之前

之后

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 创建了匿名类。

  1. 选择代码片段,在本例中是 println 方法的参数。

    argument_println.png
  2. 在主菜单中,前往 重构 | 提取/引入 | 函数组件

    IntelliJ IDEA 打开 提取功能变量 对话框。

    或者,您也可以从编辑器中的上下文菜单中选择 重构 | 对此进行重构 Ctrl+Alt+Shift+T ,然后选择 功能变量

    extrct_funtional_var.png
  3. 当所选代码依赖于实例字段时,例如在此示例中,会出现 将字段作为参数传递 复选框,您可以在字段位置传递一个参数。

    extrct_funtional_var_parameter.png

    但是,例如,如果您选择的代码片段依赖于任何局部变量或参数

    sample_string.png

    相应的条目会出现在列表中。

    local_variable_and_parameter.png

    当您在对话框中取消选择某个参数时,将使用相应的局部值。

    when_param_deselected.png

    配置您的选项然后点击 OK

  4. 从弹出菜单中选择适用的函数式接口。

    functional_interface.png
  5. 如果您愿意,可以更改提取变量的名称,若您不想使用列表中建议的名称。

    changing_variable_name.png
  6. IntelliJ IDEA 创建了可供您进一步使用的 lambda。

    composed_function.png

示例

之前

之后

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)); } }
最后修改日期: 2025年 12月 2日