更新//
我注意到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() {
}
}
在新类中,选择类名,然后选择“重构”->“用委派替换继承”,选择您的接口,勾选所有方法名称,按回车键。您将获得:
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