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甚至具有此选项。

10-06 10:04