gpt4 book ai didi

java - 自动将继承转换为委托(delegate)

转载 作者:行者123 更新时间:2023-12-01 10:06:36 25 4
gpt4 key购买 nike

Automated delegation in Java

在上面的链接中,用户提出了类似的问题,但给出的答案需要使用反射。

我的问题是是否有一个重构工具可以自动为每个委托(delegate)类生成所有的单行方法。

Intellij 提供了一个“用委托(delegate)替换继承”工具,但它不能正确完成工作 - 当我使用它时,它会创建一大堆重复方法和其他奇怪的行为,这使得它比实际手动执行更糟糕(我认为这是因为它尝试委托(delegate)的多个接口(interface)相互冲突并造成困惑。

我做错了吗,或者这可能是 IntelliJ 中的错误或限制?

我可以使用任何解决方法来代替花费时间复制粘贴代码吗?

编辑:

我已将问题隔离如下(当然每个类都在单独的文件中):

class TestClass extends MyClass {
void function() {}
}
class MyClass extends MyAbstractClass implements MyInterface {
@Override
void function() {}
}
abstract class MyAbstractClass {
abstract void function();
}
interface MyInterface {
void function();
}

现在,如果我在 TestClass 上使用“Replace Inheritance With Delegation”,我会得到以下结果:

class TestClass implements MyInterface {
private final MyMyClass myClass = new MyMyClass();

void function() {
myClass.function();
}

void function() {
myClass.function();
}

private class MyMyClass extends MyClass {
void function() {}
}
}

所以 function() 出现了两次,我相信这不应该出现,因为代码自然不能用具有相同签名的两个函数进行编译,迫使我手动删除其中一个,这对于具有许多相同函数的实际类来说是乏味的签名

例如尝试使用 MyClass<E> extends HashSet<E>看看它变得多么困惑。我可以选择要委托(delegate)的特定函数,并确保我不会只选择 1 个具有相同签名的方法,但这使得整个重构变得毫无意义 - 对我来说,自己编写转发函数会更快...

最佳答案

生成一个覆盖所有方法的子类,然后将 super. 替换为 delegate.。有些 IDE 甚至有此选项。

关于java - 自动将继承转换为委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408673/

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