gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:50:56 26 4
gpt4 key购买 nike

有时,我会像这样创建一个装饰器类:

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 有一个用于生成委托(delegate)方法的“生成”选项。创建一个新类:

public class MyDecoratorClass {
private MyInterfaceWithManyMethods myInterface;
}

然后标记 myInterface,转到 Menu > Code > Delegate Methods,选择所有要包装的方法,就是这样。

//更新结束

您可以尝试“重构”->“用委托(delegate)替换继承”重构。它应该能够做到这一点,就像这样。我称之为“使用 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() {
}
}

在新类中,选择类名,然后“重构”->“用委托(delegate)替换继承”,选择你的接口(interface),勾选所有方法名,回车。你会得到:

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

关于java - IntelliJ 可以自动创建装饰器类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com