如何避免孩子重复构造函数
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 的样板,而不是另一半。 如果您的答案不再适用,建议您删除。以上是关于如何避免孩子重复构造函数的主要内容,如果未能解决你的问题,请参考以下文章