Automated delegation in Java
在上面的链接中,用户提出了类似的问题,但给出的答案需要使用反射。
我的问题是,是否有一个重构工具能够为每个委派类自动生成所有单线方法。
Intellij提供了“用委派替换继承”工具,但它不能正常工作-当我使用它时,会造成大量重复方法和其他怪异行为,这比手动进行操作更糟(我认为是因为它尝试委托的多个接口相互冲突并导致整个混乱。
我做错了吗,或者可能是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上使用“用委托替换继承”,则会得到以下结果:
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>
尝试一下,看看它变得一团糟。我可以选择要委派的特定函数,并确保我不会只选择一种具有相同签名的方法,但这使整个重构毫无意义-对我来说,自己编写转发函数会更快... 最佳答案
生成覆盖所有方法的子类,然后将super.
替换为delegate.
。某些IDE甚至具有此选项。