更改签名
更改签名 重构结合了几种可以应用于方法签名或类签名的修改。
对于一个 class ,此重构可以将类转换为泛型并操作其类型参数。 它会自动更正该类的所有调用、实现和重写。
对于 方法 ,此重构可以更改方法名称,添加、删除、重新排序和重命名参数和异常,并通过调用层次结构传播新的参数和异常。
就地更改签名
在编辑器中,开始添加或编辑类或方法的参数。 IntelliJ IDEA 会在编辑器中显示 更改签名 内嵌提示。

点击内嵌提示或按 Alt+Enter。
如果您正在编辑一个参数,IntelliJ IDEA将为您提供更新用法的选项。 点击 下一步 应用建议。

如果您正在添加新参数,IntelliJ IDEA 将为您提供添加默认值并更新使用情况。 点击 更新 以应用默认值。

调出 Change Signature 对话框
选择您要更改签名的方法或类。
从上下文菜单中选择 (Ctrl+F6)。
在对话框中,根据您正在更改签名的内容,指定适当的选项,然后点击 重构。 如果您想查看潜在更改的预览,请点击 预览。
更改类签名示例
让我们向类 Param1, Param2 添加类型参数 MyClass。
字符串和整数是为 更改类签名 对话框中的 Param1 和 Param2 分别指定的默认值。
您还可以为参数添加一个有界值,以对传递给类型参数的内容进行一些限制。 例如,添加 Param3 ,默认值 List 和边界值 Collection

之前 | 之后 |
|---|---|
public class MyClass {
public class MyOtherClass {
MyClass myClass;
void myMethod(MyClass myClass) {
}
}
}
|
public class MyClass<Param1, Param2, Param3 extends Collection> {
public class MyOtherClass {
MyClass<String, Integer> myClass;
void myMethod(MyClass<String, Integer, List> myClass) {
}
}
}
|
更改方法签名示例
您可以向方法添加参数,并在 更改方法签名 对话框中指定不同的选项,以获得不同的结果。
您还可以将异常添加到方法中,并且它们将在调用层次结构中传播。

添加参数
让我们添加一个参数,名称是 price ,类型是 双引号 ,默认值是 0.0。
IntelliJ IDEA 向方法添加参数,更新方法调用并指定默认参数值。
之前 | 之后 |
|---|---|
public class MyClass {
public void myMethod(int value) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
|
public class MyClass {
public void myMethod(int i, double price) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1, 0.0);
}
}
}
|
使用任意变量
让我们更新所有的方法调用,并在方法调用附近寻找合适类型的变量并传递给该方法。 要实现该检查,请选择 使用 Any Var 选项。
因此,IntelliJ IDEA 查找与新参数具有相同类型的变量 d 并在方法调用中使用它。
之前 | 之后 |
|---|---|
public class MyClass {
public void myMethod(int value) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
|
public class MyClass {
public void myMethod(int i, double price) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1, d);
}
}
}
|
重载方法
我们请求 IntelliJ IDEA 保持方法调用不变,但创建一个新的重载方法,该方法将调用具有新签名的方法。 要实现这一点,请使用 通过重载方法委托 选项。
请注意,新重载方法具有旧签名。 但是,它使用新的签名调用方法。 在执行重构时,指定了 0.0 作为默认参数值。
之前 | 之后 |
|---|---|
public class MyClass {
public void myMethod(int value) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
|
public class MyClass {
public void myMethod(int i) {
myMethod(i, 0.0);
}
public void myMethod(int i, double price) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
|
传播参数
让我们通过调用方法
Alt+G
将新参数传递到方法调用 myMethodCall()。
因此,新参数 price 通过调用方法传播到方法调用,并相应地改变方法调用。
之前 | 之后 |
|---|---|
public class MyClass {
public void myMethod(int value) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
|
public class MyClass {
public void myMethod(int i, double price) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass, double price) {
double d = 0.5;
myClass.myMethod(1, price);
}
}
}
|
传播异常
让我们添加一个方法 read ,该方法会向类 MyClass 抛出一个异常 IOException。
那么让我们创建一个新的类 ExtendsMyClass ,它将扩展 MyClass 并重写原来的 read 方法。
如果我们返回 MyClass 并决定添加另一个异常,例如通过这种重构添加 TimeOutException ,方法 read 也会在子类中更新。
之前 | 之后 |
|---|---|
public class MyClass {
public void read() throws IOException {
}
public void myMethod(int value) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
//Let's create a new class "ExtendsMyClass".
public class ExtendsMyClass extends MyClass {
@Override
public void read() throws IOException {
super.read();
}
}
|
public class MyClass {
public void read() throws IOException, TimeOutException {
}
public void myMethod(int value) {
}
public class MyOtherClass {
public void myMethodCall(MyClass myClass) {
double d = 0.5;
myClass.myMethod(1);
}
}
}
//As you see, "TimeOutException" was added.
public class ExtendsMyClass extends MyClass {
@Override
public void read() throws IOException, TimeOutException {
super.read();
}
}
|
添加参数
点击
return值,该值已用红色高亮显示。按 Alt+Enter 并选择 创建parameter '<parameter_name>'。
在 更改签名 对话框中,调整参数设置或接受建议的设置。
点击 重构(R)。
更改签名对话框
条目 | 描述 |
|---|---|
名称 | 函数、方法或方法规范的名称。 |
形参 | 签名中的参数列表。 在 形参 字段中,您可以对参数执行以下操作:
|
Java specific 和 Scala specific 对话框是可用的。