阅读(3537) (15)

IntelliJ IDEA方法重构

2017-11-03 10:51:47 更新

调用提取方法重构时,IntelliJ IDEA 分析选定的代码块并检测作为所选代码片段的输入的变量以及为其输出的变量。

如果只有一个输出变量,则它将其用作提取方法的返回值。如果有多个输出变量,则可能不应用提取方法重构,并出现错误消息。

在这种情况下,允许提取方法工作有几种变通办法。例如,您可能会引入一个包含所有输出值的特殊数据类。

提取方法重构具有以下限制:

  • 重构在自动模式下不使用多个输出值。在应用重构之前,您必须更改您的代码。
  • 重构对于有条件地从包含方法返回的代码片段不起作用,并且不放在它的末尾。

Java 示例

重构前 重构后
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;
}
public ArrayList method() {
   String[] strings = {"a","b","c"};
   ArrayList list = new ArrayList();
   for (int i=0; i < strings.length; i++)
       {list.add(strings[i]);}
   return list;
public ArrayList method() {
    String[] strings = {"a","ab","abc"};
    ArrayList list=add(strings);
    return list;
}
private ArrayList add(String[] strings) {
    ArrayList list = new ArrayList();
    for (int i=0; i < strings.length; i++)
        {list.add(strings[i]);}
    return list;
}

提取方法重构

若要提取方法,请按照下列步骤操作:

  1. 在编辑器中,选择要转换成方法或函数的代码块。

    构成方法的代码片段不一定必须是一组语句。它也可能是代码中某处使用的表达式。

  2. 在主菜单或选择的上下文菜单上,选择:重构| 提取| 方法或者按 Ctrl+Alt+M。
  3. 在打开的 "提取方法" 对话框中,指定新函数的名称。
  4. 要创建一个静态方法,请选中 "声明静态" 复选框。
  5. 在 "参数" 区域中,请执行以下操作:
    • 通过选择/清除相应的复选框来指定要作为方法参数传递的变量。

      如果某个参数被禁用,则将在提取的方法中创建一个具有初始值的相应类型的局部变量,以便您必须手动输入适当值的初始值设定项。

    • 通过双击相应的参数行并输入新名称来重命名所需的参数。
  6. 在可见性区域中定义方法的可见性范围。
  7. 在 "签名预览" 窗格中检查结果,然后单击 "确定" 创建方法。选定的代码片段将被方法调用替换。此外,IntelliJ IDEA 将建议替换在当前类中找到的任何类似的代码片段。

处理重复项

IntelliJ IDEA 检测到可能接受不同值作为参数的重复代码片段,并以差异查看器的格式显示以下建议:

IntelliJ IDEA

如果单击 "接受签名更改" 按钮,所有遇到的重复项都将突出显示,IntelliJ IDEA 将要求您进行确认:

IntelliJ IDEA

最后,在用方法调用替换所需的重复项之后,您将得到以下代码:

IntelliJ IDEA

您也可以从重复的代码段中提取方法,IntelliJ IDEA 在重复分析过程中发现的。遇到的重复项显示在 "重复" 工具窗口中,您可以在其中尝试用方法调用替换它们。