阅读(3917) (15)

如何在Java中更改方法签名

2017-11-02 11:57:45 更新

在 Java 中,可以使用更改方法签名重构为:

  • 更改方法名称、返回类型和可见性范围。
  • 添加新的参数并删除现有的参数。请注意,您还可以使用专用的提取参数重构来添加参数。
  • 重新排列参数。
  • 更改参数名称和类型。
  • 添加和删​​除异常。
  • 通过方法调用层次结构传播新的参数和异常。

示例

下表显示了执行相同更改方法签名重构的4种不同方法。

在所有情况下,类型为 double 的新参数 price该类型的新参数添加到方法 myMethod () 中。

这些示例显示了如何根据重构设置影响方法调用、调用方法 (myMethodCall ()) 和其他代码片段。

实例-1:

重构之前重构之后
public class MyClass {
// 这是其签名将被更改的方法:
    public void myMethod(int value) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此处是方法调用:        myClass.myMethod(1);
    }
}
// 要求 IntelliJ IDEA 更新所有的方法调用并且指定要传递给方法的默认值。
public class MyClass {
    // 已经添加的新参数 price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 方法调用已相应更改:        myClass.myMethod(1, 0.0);
    }
}
// 执行重构时, 0.0 被指定为默认参数值。

实例-2:

重构之前重构之后
public class MyClass {
    // 这是其签名将被更改的方法:    public void myMethod(int value) {
        // some code here
    }
}

public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此处是方法调用:        myClass.myMethod(1);
    }
}
// 要求 IntelliJ IDEA 更新所有的方法调用,并且询问 IntelliJ IDEA 在方法调用附近查找合适类型的变量, 并将此变量传递给方法。在 IntelliJ IDEA 中,该选项被称为 Use Any Var.
public class MyClass {
    // 已经添加的新参数 price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 方法调用已相应更改:        myClass.myMethod(1, d);
    }
}
// 在方法调用附近, IntelliJ IDEA 找到了与新参数具有相同类型的变量 d。因此, 此变量在方法调用中使用。

实例-3:

重构之前重构之后
// 这是其签名将被更改的方法:    public void myMethod(int value) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此处是方法调用:        myClass.myMethod(1);
    }
}
// 我们将要求 IntelliJ IDEA 保持方法调用不变, 但创建一个新的重载方法, 它将使用新的签名调用该方法。在 IntelliJ IDEA 中, 这种处理方法调用的方法被称为通过重载方法的委托。
public class MyClass {
    // A new overloading method has been created:
    public void myMethod(int i) {
               myMethod(i, 0.0);
               }
    // 新添加的参数 price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 方法调用没有改变:
        myClass.myMethod(1);
    }
}
// 请注意, 新的重载方法具有旧的签名。但是, 它使用新的签名调用该方法。在执行重构时, 0.0 被指定为默认参数值。

实例-4:

重构之前 重构之后
public class MyClass {
    // 这是其签名将被更改的方法:    public void myMethod(int value) {
        // some code here
    }
}
public class MyOtherClass {
    // 该方法也会更改其签名:
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此处是方法调用:        myClass.myMethod(1);
    }
}
// 这一次, 我们将要求 IntelliJ IDEA 通过调用方法 myMethodCall () 将新参数传递给方法调用。
public class MyClass {
    // 新添加的参数 price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    // 新的参数价格通过调用方法传播到方法调用:    public void myMethodCall(MyClass myClass, double price) {
        double d=0.5;
        // 方法调用已相应更改:        myClass.myMethod(1, price);
    }
}

更改方法签名

  1. 在编辑器中,将光标放在要更改其签名的方法的名称中。
  2. 执行以下操作之一:
    • 按 Ctrl+F6。
    • 在主菜单中选择:重构| 更改签名。
    • 从上下文菜单中选择:重构|更改签名。

    请注意,如果重构覆盖其他方法的方法,IntelliJ IDEA 建议从基类修改方法,或仅修改选定的方法。

  3. 在 "更改签名" 对话框中,对方法签名进行必要的更改,并指定需要进行的其他相关更改。

    您可以:

    • 通过在可见性下选择必要的选项来更改方法可见性范围(访问级别修饰符) 能见度。
    • 通过编辑 "返回类型" 字段的内容来更改方法返回类型。

      请注意,此字段以及用于指定类型的其他字段中都有代码完成。

    • 更改方法名称。要做到这一点,请在 "名称" 字段中编辑文本。
    • 使用 "参数" 选项卡上的控件管理方法参数:
      • 要添加新参数,请单击(Alt+Insert)并在相应字段中指定新参数的属性。如有必要,请选择 Use Any Var 选项。

        添加参数时,可能需要将这些参数传播到调用当前方法的方法。

      • 要删除参数,请在表中选择此参数,然后单击(Alt+Delete)。
      • 要重新排序参数,请使用(Alt+Up)和(Alt+Down)。
      • 要更改参数的名称、类型或默认值,请单击表中的此参数,并在相应的字段中进行必要的编辑。
    • 沿调用当前方法的方法的层次结构传播新的方法参数(如果有)。

      (可能有一些方法调用您正在更改其签名的方法,这些方法反过来可能会被其他方法调用,等等,您可以通过以下方式将所做的更改传播到当前方法的参数:调用方法的层次结构,并指定哪些调用方法应该受到影响,哪些不应该。)

      如何传播新参数:

      1. 点击(Alt+G)。
      2. 在 "选择要传播新参数的方法" 对话框的左边的窗格中,展开必要的节点,并选中要将新参数传播到的方法旁边的复选框。

        为了帮助您选择必要的方法,调用方法的代码和被调用的方法显示在对话框的右侧部分(分别在调用方法和被调用者方法窗格中)。

        当您在左侧窗格中的方法之间切换时,右侧部分中的代码会相应更改。

      3. 点击“确定”。
    • 使用异常类型列表和 "例外" 选项卡上的按钮管理方法异常。这些过程类似于用于管理方法参数的步骤。
    • 沿着调用当前方法的方法的层次结构传播新的异常(如果有的话)。要启动此过程,请使用(Alt+X)。在所有其他方面,该过程与用于传播新方法参数的步骤类似。
    • 指定如何处理方法调用。为此,请选择以下方法调用选项之一:
      • 如果你想要修改方法调用,请选择 "修改"。
      • 如果要使现有方法调用保持不变,请通过重载方法选择 "委托"。
  4. 要立即执行重构,请单击 "重构"。

    若要在实际执行重构之前查看预期的更改并进行必要的调整,请单击 "预览"。