有时,我创建一个装饰器类,如下所示:
class MyInterfaceDecorator implements MyInterface { private final MyInterface delegate; ... constructor taking a MyInterface instance ... @Override public Object someInterfaceMethod(Some argument) { return delegate.someInterfaceMethod(argument); } ... etc, more methods here... }
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