我有以下代码:
public abstract class AbstractClass<T> {
final A a;
@Inject
AbstractClass(A a) {
this.a = a;
}
}
public class B extends AbstractClass<C> {
final D d;
@Inject
B(D d) {
super(); // this fails
this.d = d;
}
}
我的class B
扩展了AbstractClass
,AbstractClass
使用@Inject
将A
注入其中。在类 B
中,我无法调用super()
AbstractClass
因为它在构造函数中有一个参数。如何处理子类中超类的依赖注入以使super()
正常工作?
当超类使用 @Inject
时如何构造类?
您还需要接受A
:
@Inject
B(A a, D d) {
super(a);
this.d = d;
}
然后 Guice 应该同时注入A
和D
,您只需将A
传递给超类构造函数即可。仅仅因为构造函数标有 @Inject
并不意味着它只能由 Guice 调用......事实上,我实际上会从AbstractClass
中删除@Inject
- 除非Guice有一些我不知道的魔法,否则无论如何它都无法注入它。