IntelliJ IDEA 2025.1 Help

更改签名

更改签名 重构结合了几种可以应用于方法签名或类签名的修改。

对于一个 class ,此重构可以将类转换为泛型并操作其类型参数。 它会自动更正该类的所有调用、实现和重写。

对于 方法 ,此重构可以更改方法名称,添加、删除、重新排序和重命名参数和异常,并通过调用层次结构传播新的参数和异常。

就地更改签名

  1. 在编辑器中,开始添加或编辑类或方法的参数。 IntelliJ IDEA 会在编辑器中显示 更改签名 内嵌提示。

    原地更改签名重构
  2. 点击内嵌提示或按 Alt+Enter

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

    更新参数的用法

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

    为参数添加默认值

调出 Change Signature 对话框

  1. 选择您要更改签名的方法或类。

  2. 从上下文菜单中选择 重构 | 更改签名 (Ctrl+F6)。

  3. 在对话框中,根据您正在更改签名的内容,指定适当的选项,然后点击 重构。 如果您想查看潜在更改的预览,请点击 预览

更改类签名示例

让我们向类 Param1, Param2 添加类型参数 MyClass

字符串和整数是为 更改类签名 对话框中的 Param1Param2 分别指定的默认值。

您还可以为参数添加一个有界值,以对传递给类型参数的内容进行一些限制。 例如,添加 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(); } }

添加参数

  1. 点击 return 值,该值已用红色高亮显示。

  2. Alt+Enter 并选择 创建parameter '<parameter_name>'

  3. 更改签名 对话框中,调整参数设置或接受建议的设置。

  4. 点击 重构(R)

更改签名对话框

条目

描述

名称

函数、方法或方法规范的名称。

形参

签名中的参数列表。 在 形参 字段中,您可以对参数执行以下操作:

  • 添加 "添加"图标 :添加一个新参数。 您可以在相应的表格行中指定新参数的属性(名称、类型和默认值)

  • 移除 删除图标 :移除参数。

  • 上移 “上移”图标下移 向下图标 图标:重新排序参数。

Java specificScala specific 对话框是可用的。

最后修改日期: 2025年 4月 24日