IntelliJ IDEA 2025.2 Help

提取/引入变量

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

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

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

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

  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年 9月 22日