【问题标题】: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 案例感兴趣 stackoverflow.com/questions/1644317/…

标签: java dry


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我也是这么想的,但是我对@Named Annotation不太熟悉。
    • 这看起来不错。你可以去掉 1/2 的样板,而不是另一半。
    • 如果您的答案不再适用,建议您删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多