IntelliJ IDEA提取变量
IntelliJ IDEA "提取变量重构" 将所选表达式的结果放入一个变量中。它声明一个新的变量,并使用该表达式作为初始值设定项。原始表达式被替换为新变量(请参见下面的示例)。
在 Java 中,新变量的类型对应于由表达式返回的类型。有一个声明新变量的选项 final。
要执行这个重构,您可以使用:
- 就地重构。在这种情况下,你可以在编辑器中指定新的名字。
- 重构对话框,你可以在其中指定所有必需的信息。要使这样一个对话框可访问,您必须清除 "编辑器设置" 中的 "就地" 模式下的复选框。
您可以自己选择要用变量替换的表达式,也可以使用智能表达式选择。在这种情况下,IntelliJ IDEA 将帮助您选择所需的表达式。
这个重构也可用于 JavaScript 和 Sass。
Java 示例
示例-1
提取变量重构前:
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;
示例-2
提取变量重构前:
public void method() {
int a = anotherClass.innerClass.i;
int b = anotherClass.innerClass.j;
}
提取变量重构后:
public void method() {
AnotherClass.InnerClass aClass = anotherClass.innerClass;
int a = aClass.i;
int b = aClass.j;
}
示例-3
提取变量重构前:
static void printNames(final String fullName) {
System.out.println(fullName.substring(fullName.indexOf(" ") + 1));
System.out.println(fullName.substring(0, fullName.indexOf(" ")));
}
提取变量重构后:
static void printNames(final String fullName) {
int firstNameEndIndex = fullName.indexOf(" ");
System.out.println(fullName.substring(firstNameEndIndex + 1));
System.out.println(fullName.substring(0, firstNameEndIndex));
}
就地提取变量
要使用就地重构来提取变量, 请按照下列步骤操作:
- 在编辑器中,选择要用变量替换的表达式。你可以自己做或使用智能表达式选择功能让 IntelliJ IDEA 帮助您。所以,请执行以下任一个操作:
- 如果找到了所选表达式的多个匹配项,请选择 "仅替换此事件" 或 "替换出现的多个实例" 弹出菜单中的所有实例。要选择所需的选项,只需单击它。或者,使用向上和向下箭头键导航到感兴趣的选项,然后按 Enter 来选择它。
- 指定变量的名称。执行以下任一个操作:
使用对话框提取变量
如果在编辑器设置中清除了 "启用就地重构" 复选框,则将通过 "提取变量" 对话框来执行 "提取变量"。
- 在编辑器中,选择要用变量替换的表达式。你可以自己做或使用智能表达式选择功能让 IntelliJ IDEA 帮助您。所以,请执行以下任一个操作:
- 在 "提取变量" 对话框中:
- 指定 "名称" 字段旁边的变量名。您可以从列表中选择一个建议的名称或在 "名称" 框中键入名称。
- 如果找到了选定表达式的多个匹配项,则可以选择相应的复选框来替换所有找到的匹配项。如果您只想替换当前的匹配项,请清除 "替换所有实例" 复选框。
- 如果你想声明新的变量
final
,请选中 "声明最终的复选框"(该选项仅适用于 Java) - 对于 ActionScript,您可以选择引入常量而不是变量。要做到这一点,请选中 "Make constant " 复选框。
请注意,IntelliJ IDEA 社区版中不支持 ActionScript。
- 点击“确定”。
有关其他语言和框架特定的重构,请参阅以下各节:
- 有关 JavaScript 过程,请参阅:在 JavaScript 中提取变量。
- 有关 Sass 程序,请参阅:为 Sass 提取变量。