您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

IntelliJ可以自动创建装饰器类吗?

IntelliJ可以自动创建装饰器类吗?

我注意到IntelliJ具有用于生成委托方法的“生成”选项。创建一个新类:

public class MyDecoratorClass {
    private MyInterfaceWithManyMethods myInterface;
}

然后标记myInterface,转到“菜单”>“代码”>“委托方法”,选择要包装的所有方法,仅此而已。

您可以尝试“重构”->“用委派替换继承”重构。这样就应该能够做到。我称之为“使用Alt + Enter的代码

转到要为其生成装饰器的界面。

public interface MyInterfaceWithManyMethods {
    void method1();
    void method2();
    void method3();
}

按Alt + Enter,选择“实现接口”,为装饰器命名,例如“ MyDecorator”。这给你

public class MyDecorator implements MyInterfaceWithManyMethods {
    public void method1() {
    }
    public void method2() {
    }
    public void method3() {
    }
}

在新类中,选择类名称,然后选择“重构”->“用委派替换继承”,选择您的界面,勾选所有方法名称,然后按Enter。你会得到:

public class MyDecorator {

    private final MyObject object = new MyObject();

    public void method1() {
        object.method1();
    }

    public void method2() {
        object.method2();
    }

    public void method3() {
        object.method3();
    }

    private class MyObject implements MyInterfaceWithManyMethods {
        public void method1() {

        }

        public void method2() {

        }

        public void method3() {

        }
    }
}

手动删除内部类和对象初始化器。你得到:

public class MyDecorator {


    public void method1() {
        object.method1();
    }

    public void method2() {
        object.method2();
    }

    public void method3() {
        object.method3();
    }

}

在现在标记为红色的“对象”上按Alt + Enter,选择“创建字段”,然后选择MyInterfaceWithManyMethods。

public class MyDecorator {


    private MyInterfaceWithManyMethods object;

    public void method1() {
        object.method1();
    }

    public void method2() {
        object.method2();
    }

    public void method3() {
        object.method3();
    }

}

选择对象变量,按Alt + Enter,选择“添加构造函数参数”:

public class MyDecorator {


    private MyInterfaceWithManyMethods object;

    public MyDecorator(MyInterfaceWithManyMethods object) {
        this.object = object;
    }

    public void method1() {
        object.method1();
    }

    public void method2() {
        object.method2();
    }

    public void method3() {
        object.method3();
    }

}

您只需按几下Alt + Enter即可完成所有操作。阅读内容很繁琐,但可以在不到20秒的时间内完成。如果仅使用2或3种方法,使用实时模板可能会更快,但是如果使用复杂签名的方法很多,则使用此方法将在约20秒内获得工作结果。Alt + Enter只是岩石:D

其他 2022/1/1 18:30:38 有339人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶