Update//
我注意到 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