提取委托
此重构允许基于现有类的成员选定来创建新类。
执行重构
- 在代码编辑器中,将光标放置在要将其成员提取到新类的类中的任何位置。
- 单击右键展示上下文菜单,选择 。
- 在打开的“提取委托”对话框中,提供重构参数。
- 提供提取类的名称、包和目标目录。
- 选中“创建嵌套类”复选框以在当前类中创建新类。
- 选中“生成访问器”复选框,为提取的字段生成getter方法。
- 选中“提取为枚举”复选框,将提取的类创建为枚举类。如果源类包含静态最终字段static final fields,这是可能的。
- 在“要提取的成员”区域中,选择要提取的类成员。如果选择了“提取为枚举”,则还可以选择要作为枚举常量提取的字段旁边的“作为枚举”复选框。
- 在“可见性”选项中,选择要应用于提取的类成员的可见性修改器。要自动应用所需的可见性修改器,以便访问类成员,请选择“升级”选项。
如下图所示:
图1 提取委托
- 单击“重构”以应用重构。
示例
作为示例,将ExtractDelegate类中的print方法提取到一个嵌套的Printer枚举类中。
重构前
“com\refactoring\source\ExtractDelegate.java”文件内容如下:
class ExtractDelegate { public static void main(String[] args) { new ExtractDelegate().print(); } private static final String message = "Hello World!"; private void print() { System.out.println(message); } }
重构后
“com\refactoring\source\ExtractDelegate.java”文件内容如下:
class ExtractDelegate { private final Printer printer = new Printer(); public static void main(String[] args) { new ExtractDelegate().print(); } private void print() { printer.print(); } }
同时,生成一个“com\refactoring\source\Printer.java”文件,文件内容如下:
package com.refactoring.source; public class Printer { static final String message = "Hello World!"; public Printer() { } void print() { System.out.println(message); } }