更新//
我注意到 IntelliJ 有一个用于生成委托方法的“生成”选项。创建一个新类:
public class MyDecoratorClass {
private MyInterfaceWithManyMethods myInterface;
}
然后标记 myInterface,转到 Menu > Code > Delegate Methods,选择所有要包装的方法,就是这样。
//更新结束
您可以尝试“重构”->“用委托替换继承”重构。它应该能够做到这一点,就像这样。我称之为“使用 Alt+Enter 的代码”
转到要为其生成装饰器的界面。
public interface MyInterfaceWithManyMethods {
void method1();
void method2();
void method3();
}
按 Alt+Enter,选择“Implement Interface”,为您的装饰器命名,如“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