当超级class使用@Inject时,我如何构造一个class?

How can I construct a class when the super class uses @Inject?

我有以下代码:

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 使用 @InjectA 注入其中。在 class B 中我不能调用 super() 因为 AbstractClass 在构造函数中有一个参数。我如何处理 subclass 中 superclass 的依赖注入以使 super() 工作?

如何在superclass使用@Inject时构造class?

您还需要接受 A

@Inject
B(A a, D d) {
  super(a);
  this.d = d;
}

然后 Guice 应该注入 AD,你只需将 A 传递给超类构造函数。仅仅因为一个构造函数被标记为 @Inject 并不意味着它可以 只有 被 Guice 调用......事实上,我实际上会从中删除 @Inject AbstractClass - 除非 Guice 有一些我不知道的魔法,否则无论如何它都无法注入。