更新时间:2025-08-19 GMT+08:00
分享

提取委托

此重构允许基于现有类的成员选定来创建新类。

执行重构

  1. 在代码编辑器中,将光标放置在要将其成员提取到新类的类中的任何位置。
  2. 单击右键展示上下文菜单,选择重构 > 提取委托...
  3. 在打开的“提取委托”对话框中,提供重构参数。

    • 提供提取类的名称、包和目标目录。
    • 选中“创建嵌套类”复选框以在当前类中创建新类。
    • 选中“生成访问器”复选框,为提取的字段生成getter方法。
    • 选中“提取为枚举”复选框,将提取的类创建为枚举类。如果源类包含静态最终字段static final fields,这是可能的。
    • “要提取的成员”区域中,选择要提取的类成员。如果选择了“提取为枚举”,则还可以选择要作为枚举常量提取的字段旁边的“作为枚举”复选框。
    • “可见性”选项中,选择要应用于提取的类成员的可见性修改器。要自动应用所需的可见性修改器,以便访问类成员,请选择“升级”选项。

      如下图所示:

      图1 提取委托

  4. 单击“重构”以应用重构。

示例

作为示例,将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);
    }
}

相关文档