# 将构造函数替换为构建器

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

> **TL;DR**
> `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)) |   将构造函数替换为构建器
>
>
>
> 此重构功能仅作为 [intention action](intention-actions.html)提供。

将构造函数替换为构建器   重构可帮助隐藏构造函数，将其用法替换为对新生成的构建器类或现有构建器类的引用。

> **Tip:**
> 此操作不会删除构造函数。 它只替换其用法。

Procedure:

1. 请将文本光标放在编辑器中的构造函数调用处，然后按 `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))。

2. 从可用的上下文操作列表中选择   将构造函数替换为构建器  。

![将构造函数替换为构建器](https://resources.jetbrains.com/help/img/idea/2026.3/replace_constructor_with_builder.png)

3. 在打开的对话框中，如果需要，修改建议的 setter 名称。 指定您是否要在构建器中初始化生成的字段。

如果指定的初始值与构造函数调用中的形参值匹配，则可以通过选中   可选 Setter   复选框来跳过此类形参的 setter 方法。 还可以指定是创建新的构建器，还是使用现有构建器。

4. [预览](refactoring-source-code.html#changes_preview)并应用更改。

## 示例

|  之前  |  之后  |
| --- | --- |
|     ```JAVA // UIConstraint.java  public class UIConstraint {     private int gridX;     private int gridY;     private int gridWidth;     private int gridHeight;     private double weightX;     private double weightY;      UIConstraint(int gridX, int gridY,                  int gridWidth, int gridHeight,                  double weightX, double weightY) {         this.gridX = gridX;         this.gridY = gridY;         this.gridWidth = gridWidth;         this.gridHeight = gridHeight;         this.weightX = weightX;         this.weightY = weightY;     } }  ```    |     ```JAVA // UIConstraint.java (unchanged)  public class UIConstraint {     private int gridX;     private int gridY;     private int gridWidth;     private int gridHeight;     private double weightX;     private double weightY;      UIConstraint(int gridX, int gridY,                  int gridWidth, int gridHeight,                  double weightX, double weightY) {         this.gridX = gridX;         this.gridY = gridY;         this.gridWidth = gridWidth;         this.gridHeight = gridHeight;         this.weightX = weightX;         this.weightY = weightY;     } }  // UIConstraintBuilder.java  public class UIConstraintBuilder {     private int gridX = 0;     private int gridY = 0;     private int gridWidth = 1;     private int gridHeight = 1;     private double weightX = 0.0;     private double weightY = 0.0;      public UIConstraintBuilder setGridX(int gridX) {         this.gridX = gridX;         return this;     }      public UIConstraintBuilder setGridY(int gridY) {         this.gridY = gridY;         return this;     }      public UIConstraintBuilder setGridWidth(int gridWidth) {         this.gridWidth = gridWidth;         return this;     }      public UIConstraintBuilder setGridHeight(int gridHeight) {         this.gridHeight = gridHeight;         return this;     }      public UIConstraintBuilder setWeightX(double weightX) {         this.weightX = weightX;         return this;     }      public UIConstraintBuilder setWeightY(double weightY) {         this.weightY = weightY;         return this;     }      public UIConstraint createUIConstraint() {         return new UIConstraint(gridX, gridY, gridWidth, gridHeight, weightX, weightY);     } }  // Test.java  public class Test {     public void main(String[] args) {         // Default values are used for omitted fields         final UIConstraint uiConstraint = new UIConstraintBuilder()                 .setGridWidth(2)                 .setWeightY(1.0)                 .createUIConstraint();     } }  ```    |

## 将构造函数替换为生成器对话框

请使用此对话框指定   将构造函数替换为构建器   重构的选项。

|  条目  |  描述  |
| --- | --- |
|  要传递给构建器的形参  |
|  形参  |  此列显示在构造函数中检测到的参数列表，这些参数将被替换为 builder 字段。  |
|  字段名称  |  此可编辑列显示了构建器中建议的字段名列表。  |
|  Setter 名称  |  此可编辑列显示了构建器中建议的 setter 名称列表。  |
|  默认值  |  使用此可编辑的列来初始化字段的默认值。  |
|  可选 Setter  |  如果字段的指定默认值与构造函数调用中的形参值匹配，则选中此复选框会在构建器调用中省略该字段的 setter 方法。 如果未选中此复选框，则仍会显示相应的 setter 方法。  |
|  构建器名称及位置  |
|  新建  |  请点击此选项以生成新的构建器类，指定名称和目标包。  |
|  构建器类名  |  此可编辑字段显示要生成的新构建器类的建议名称。 可以接受默认建议，也可以输入新名称。  |
|  新构建器的包  |  输入目标软件包的名称，或点击浏览按钮并在   选择目标包   对话框中定位该软件包。 如果所需软件包不存在，请点击 ![](https://resources.jetbrains.com/help/img/idea/2026.3/app.actions.newFolder.svg) 创建一个新的软件包。  |
|  使用现有  |  点击此选项以指定现有的 builder 类。  |
|  构建器类名  |  在此输入项目中已存在的构建器类的完全限定名称，或点击浏览按钮，通过名称或在项目树视图中查找它。  |

## See also

### 重构

[代码重构](refactoring-source-code.html)

