如何避免孩子重复构造函数

Posted

技术标签:

【中文标题】如何避免孩子重复构造函数【英文标题】:how to avoid repetitive constructor in children 【发布时间】:2016-02-12 21:45:55 【问题描述】:

我有一个父类,它的构造函数为:

    @Inject
    public AbstractResource(@Named("authorization") Authorization auth,
                            @Named("helper") Helper helper) 
        this.authorization = authorization;
        this.helper = helper;
    

现在在子类中,我有类似的构造函数:

public class MyResource extends AbstractResource 
        private Manager manager;

        @Inject
        public MyResource(@Named("authorization") Authorization auth,
                          @Named("helper") Helper helper) 
            super(auth, helper);
            this.manager = new Manager();
        
...

问题是我有大量从 AbstractResource 扩展的子类,我必须再次使用“Authorization”和“Helper”编写类似的构造函数。有什么办法可以避免重复编码?

抱歉,更新了我的代码,是的,我可以在每个子类中调用 super(..),但我仍然在每个构造函数中注入了所有这些参数,auth 和 helper,只是想知道是否有一种方法可以简化那个

【问题讨论】:

使用构造函数注入,没有。但如果你觉得没问题,你可以使用 setter 或字段注入。 几乎被骗了,但我认为您对 Guice 或 Spring 案例感兴趣 ***.com/questions/1644317/… 【参考方案1】:

您可以创建一个对象来保存所有参数。

但除此之外,不是真的。这就是 Java 中的生产 DI 代码的实际样子。

【讨论】:

【参考方案2】:

除非我遗漏了什么,否则有一个简单的解决方案是调用父级的构造函数。

在您的子类的构造函数中,第一行应该是:super(authorization, helper)

编辑:作者已编辑他的问题,因此此解决方案不再适用。

【讨论】:

我也是这么想的,但是我对@Named Annotation不太熟悉。 这看起来不错。你可以去掉 1/2 的样板,而不是另一半。 如果您的答案不再适用,建议您删除。

以上是关于如何避免孩子重复构造函数的主要内容,如果未能解决你的问题,请参考以下文章

java多个构造函数[重复]

如何避免在 C++ 中调用祖父构造函数?

c++中树的拷贝构造函数的迭代实现

如何避免依赖注入构造函数的疯狂?

如何避免在基类初始化程序中调用默认构造函数?

路由更改时如何避免构造函数调用?