# 更改签名

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

> **TL;DR**
> 操作的快捷方式： `Ctrl+F6` (Windows), `⌘ F6` (macOS), `⌘ F6` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ S` (macOS System Shortcuts), `Ctrl+F6` (XWin), `Ctrl+F6` (GNOME), `Ctrl+6` (KDE), `Ctrl+F6` (Emacs), `Ctrl+F6` (Sublime Text), `Ctrl+F6` (Sublime Text (macOS)), `Ctrl+R, S` (Visual Studio), `⌘ R, S` (Visual Studio (macOS)), `Ctrl+F6` (NetBeans), `Alt+Shift+C` (Eclipse), `⌘ ⌥ C` (Eclipse (macOS))
>
>
>
> 通用重构设置：  `设置 | 编辑器 | 常规`
>
>
>
> 可从 [UML 类图](class-diagram.html) 访问
>
>
>
> [原地](#inplace_change_signature)重构可用
>
>
>
> 快捷键： `Ctrl+F6` (Windows), `⌘ F6` (macOS), `⌘ F6` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ S` (macOS System Shortcuts), `Ctrl+F6` (XWin), `Ctrl+F6` (GNOME), `Ctrl+6` (KDE), `Ctrl+F6` (Emacs), `Ctrl+F6` (Sublime Text), `Ctrl+F6` (Sublime Text (macOS)), `Ctrl+R, S` (Visual Studio), `⌘ R, S` (Visual Studio (macOS)), `Ctrl+F6` (NetBeans), `Alt+Shift+C` (Eclipse), `⌘ ⌥ C` (Eclipse (macOS))
>
>
>
> 重构设置：  `设置 | 编辑器 | 常规`
>
>
>
> 可从 [UML 类图](class-diagram.html) 访问
>
>
>
> [原地](#inplace_change_signature)重构可用

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

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

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

Procedure: 就地更改签名

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

![原地更改签名重构](https://resources.jetbrains.com/help/img/idea/2026.3/inplace_change_signature_refactoring.png)

2. 点击嵌入提示，或按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))。

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

![更新参数的用法](https://resources.jetbrains.com/help/img/idea/2026.3/edit_parameter.png)

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

![为参数添加默认值](https://resources.jetbrains.com/help/img/idea/2026.3/add_a_new_parameter.png)

Procedure: 调出 Change Signature 对话框

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

2. 从上下文菜单中，选择  `重构 | 更改签名` （ `Ctrl+F6` (Windows), `⌘ F6` (macOS), `⌘ F6` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ S` (macOS System Shortcuts), `Ctrl+F6` (XWin), `Ctrl+F6` (GNOME), `Ctrl+6` (KDE), `Ctrl+F6` (Emacs), `Ctrl+F6` (Sublime Text), `Ctrl+F6` (Sublime Text (macOS)), `Ctrl+R, S` (Visual Studio), `⌘ R, S` (Visual Studio (macOS)), `Ctrl+F6` (NetBeans), `Alt+Shift+C` (Eclipse), `⌘ ⌥ C` (Eclipse (macOS))）。

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

## 更改类签名示例

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

> **Note:**
> 对于 [Kotlin](https://kotlinlang.org/docs/reference/)，此重构与 Java 的操作相同。 您可以按 `Ctrl+Alt+Shift+K` (Windows), `⌘ ⌥ ⇧ K` (macOS), `⌘ ⌥ ⇧ K` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ ⇧ K` (macOS System Shortcuts), `Ctrl+Alt+Shift+K` (XWin), `Ctrl+Alt+Shift+K` (GNOME), `Ctrl+Alt+Shift+K` (KDE), `Ctrl+Alt+Shift+K` (Emacs), `Ctrl+Alt+Shift+K` (Sublime Text), `⌘ ⌥ ⇧ K` (Sublime Text (macOS)), `Ctrl+Alt+Shift+K` (Visual Studio), `⌘ ⌥ ⇧ K` (Visual Studio (macOS)), `Ctrl+Alt+Shift+K` (NetBeans), `Ctrl+Alt+Shift+K` (Eclipse), `⌘ ⌥ ⇧ K` (Eclipse (macOS)) 将您的 Java 代码转换为 Kotlin。

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

您还可以为参数添加一个有界值，以对传递给类型参数的内容进行一些限制。 例如，添加  `Param3` ，默认值  `列表` 和边界值  `集合`

![更改类签名](https://resources.jetbrains.com/help/img/idea/2026.3/change_class_signature.png)

|  之前  |  之后  |
| --- | --- |
|     ```JAVA  public class MyClass {      public class MyOtherClass {         MyClass myClass;          void myMethod(MyClass myClass) {          }     } }  ```    |     ```JAVA  public class MyClass<Param1, Param2, Param3 extends Collection> {      public class MyOtherClass {         MyClass<String, Integer> myClass;          void myMethod(MyClass<String, Integer, List> myClass) {         }      } }  ```    |

> **Tip:**
> 重构可能对更改类签名中的参数顺序以及在所有用法中的参数顺序有所帮助。

## 更改方法签名示例

您可以向方法添加参数，并在   更改方法签名  对话框中指定不同的选项，以获得不同的结果。

您还可以将异常添加到方法中，并且它们将在调用层次结构中传播。

> **Note:**
> 更改方法签名 重构适用于构造函数。 在这种情况下，名称和返回类型不能更改。

> **Note:**
> 如果方法契约是通过  `@Contract` 注解指定的，  Change Method Signature 重构也会尝试转换此类方法。 然而，在某些情况下，重构可能会失败，您需要手动调整契约。

![更改方法签名](https://resources.jetbrains.com/help/img/idea/2026.3/change_method_signature.png)

### 添加参数

让我们添加一个参数，名称是  `price` ，类型是  `按两次` ，默认值是  `0.0` 。

IntelliJ IDEA 向方法添加参数，更新方法调用并指定默认参数值。

|  之前  |  之后  |
| --- | --- |
|     ```JAVA  public class MyClass {      public void myMethod(int value) {      }      public class MyOtherClass {         public void myMethodCall(MyClass myClass) {             double d = 0.5;              myClass.myMethod(1);         }     } }  ```    |     ```JAVA 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  并在方法调用中使用它。

|  之前  |  之后  |
| --- | --- |
|     ```JAVA public class MyClass {      public void myMethod(int value) {      }      public class MyOtherClass {         public void myMethodCall(MyClass myClass) {             double d = 0.5;             myClass.myMethod(1);         }     } }  ```    |     ```JAVA 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`  作为默认参数值。

|  之前  |  之后  |
| --- | --- |
|     ```JAVA public class MyClass {     public void myMethod(int value) {      }      public class MyOtherClass {         public void myMethodCall(MyClass myClass) {             double d = 0.5;             myClass.myMethod(1);         }     } }  ```    |     ```JAVA 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);         }     } }  ```    |

### 传播参数

让我们通过调用方法 ![传播参数](https://resources.jetbrains.com/help/img/idea/2026.3/propagateParameters.png)  `Alt+G`  将新参数传递到方法调用  `myMethodCall()` 。

因此，新参数  `price` 通过调用方法传播到方法调用，并相应地改变方法调用。

|  之前  |  之后  |
| --- | --- |
|     ```JAVA public class MyClass {     public void myMethod(int value) {      }      public class MyOtherClass {         public void myMethodCall(MyClass myClass) {             double d = 0.5;             myClass.myMethod(1);         }     } }  ```    |     ```JAVA 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`  也会在子类中更新。

|  之前  |  之后  |
| --- | --- |
|     ```JAVA                             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();                                 }                             }                           ```    |     ```JAVA                             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();                                 }                             }                           ```    |

> **Tip:**
> 要查看 Java 以外的语言的  Change Method Signature 重构示例，请参阅以下主题：
>
>
>
> [更改 PHP 签名](https://www.jetbrains.com/zh-cn/help/phpstorm/change-signature.html)
>
>
>
> [更改 TypeScript 签名](specific-typescript-refactorings.html#typescript_change_signature_proc)
>
>
>
> [更改 JavaScript 签名](specific-javascript-refactorings.html#javascript_change_signature_code_example)

Procedure: 添加参数

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

2. 按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))并选择   创建形参 '<parameter_name>'  。

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

4. 点击   重构  。

## 更改签名对话框

> **TL;DR**
> 操作的快捷方式： `Ctrl+F6` (Windows), `⌘ F6` (macOS), `⌘ F6` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ S` (macOS System Shortcuts), `Ctrl+F6` (XWin), `Ctrl+F6` (GNOME), `Ctrl+6` (KDE), `Ctrl+F6` (Emacs), `Ctrl+F6` (Sublime Text), `Ctrl+F6` (Sublime Text (macOS)), `Ctrl+R, S` (Visual Studio), `⌘ R, S` (Visual Studio (macOS)), `Ctrl+F6` (NetBeans), `Alt+Shift+C` (Eclipse), `⌘ ⌥ C` (Eclipse (macOS))
>
>
>
> 通用重构设置：  `设置 | 编辑器 | 常规`
>
>
>
> 可从 [UML 类图](class-diagram.html) 访问
>
>
>
> [原地](#inplace_change_signature)重构可用
>
>
>
> 快捷键： `Ctrl+F6` (Windows), `⌘ F6` (macOS), `⌘ F6` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ S` (macOS System Shortcuts), `Ctrl+F6` (XWin), `Ctrl+F6` (GNOME), `Ctrl+6` (KDE), `Ctrl+F6` (Emacs), `Ctrl+F6` (Sublime Text), `Ctrl+F6` (Sublime Text (macOS)), `Ctrl+R, S` (Visual Studio), `⌘ R, S` (Visual Studio (macOS)), `Ctrl+F6` (NetBeans), `Alt+Shift+C` (Eclipse), `⌘ ⌥ C` (Eclipse (macOS))
>
>
>
> 重构设置：  `设置 | 编辑器 | 常规`
>
>
>
> 可从 [UML 类图](class-diagram.html) 访问
>
>
>
> [原地](#inplace_change_signature)重构可用

|  条目  |  描述  |
| --- | --- |
|    名称    |  函数、方法或方法规范的名称。  |
|    参数    |     签名中的参数列表。 在   参数   字段中，您可以对参数执行以下操作：        * 添加 !["添加"图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.add.svg)：添加一个新参数。 您可以在相应的表格行中指定新参数的属性（名称、类型和默认值）    * 移除 ![移除图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.remove.svg)：移除参数。    * 上移 ![向上箭头图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.moveUp.svg) 和 下移 ![向下图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.moveDown.svg) 图标：重新排序参数。    |

[Java specific](change-class-signature-dialog.html) 和 [Scala specific](change-signature-for-scala.html) 对话框是可用的。

## See also

