用生成器替换构造函数
通过此重构,您可以将类构造函数的用法替换为对构建器类的引用。
执行重构
- 在代码编辑器中,将光标放置在要将其调用替换为对构建器类的引用的类构造器的声明上。
- 在主菜单或编辑器上下文菜单中,选择Refactor>Replace Constructor With Builder。
- 在打开的Replace Constructor With Builder对话框中,提供重构参数。
- 选择是创建新的生成器类还是使用现有的生成器类。
- 提供生成器类名,如果创建新类,则提供其包和目标目录。
- 在Parameters to Pass to the Builder选项,配置作为生成器类字段传递的构造函数参数。如果指定的字段的默认值与作为构造函数参数传递的值匹配,则可以选中Optional Setter复选框跳过此类参数的 setter 方法。否则,如果未选中复选框,则始终调用字段设置器。
- 单击Refactor以应用重构。
示例
例如,让我们用对新创建的InnerClass构建器类的引用替换InnerClassBuilder调用。请注意,由于我们将“Hello”和“World”作为Hello和World生成器类字段的默认值,因此我们可以使用可选Optional Setter选项,以便在InnerClassBuilder调用中跳过对setHello和setWorld的调用。
重构前
class ReplaceConstructor { public static void main(String[] args) { new InnerClass("Hello", "World").print(); } private static class InnerClass { private String message; public InnerClass(String hello, String world) { message = hello + ", " + world; } public void print() { System.out.println(message); } } }
重构后
class ReplaceConstructor { public static void main(String[] args) { new InnerClassBuilder().createInnerClass().print(); } static class InnerClass { private String message; public InnerClass(String hello, String world) { message = hello + ", " + world; } public void print() { System.out.println(message); } } } public class InnerClassBuilder { private String hello = "Hello"; private String world = "World"; public InnerClassBuilder setHello(String hello) { this.hello = hello; return this; } public InnerClassBuilder setWorld(String world) { this.world = world; return this; } public ReplaceConstructor.InnerClass createInnerClass() { return new ReplaceConstructor.InnerClass(hello, world); } }