从子类的提供者构造超类Provider

时间:2012-04-05 03:32:24

标签: java guice

我有一个超类,它有自己的嵌套类,在构造函数中传递(/作为提供者注入)。

类似地,我有一个子类,它有自己的嵌套类,它在构造函数中被注入(作为提供者)。 Subclass.NestedClass扩展了Superclass.NestedClass。

public class SuperClass {
  @Inject SuperClass(Provider<SuperClass.Parameters> superParam) {
  }

  public class Parameters {
    int a;  
  }
}

public class Sub extends SuperClass {
  @Inject Sub(Provider<Sub.Parameters> subParam) {
     // Need to call super here with the appropriate superclass's provider
  }

  public class Parameters extends SuperClass.Parameters {
    int b;
  }
}

有没有办法可以将Sub.Parameters的Provider转换为SuperClass.Parameters的提供者,这样我就可以在Sub的构造函数中调用super(使用该提供者)。

1 个答案:

答案 0 :(得分:0)

Java泛型帮助了我。

解决方案:

public class SuperClass {
  // Constructor
  @Inject SuperClass(Provider<? extends SuperClass.Parameters> superParam) {
  }

  public class Parameters {
    int a;  
  }
}

public class Sub extends SuperClass {
  @Inject Sub(Provider<Sub.Parameters> subParam) {
     super(subParam);
  }

  public class Parameters extends SuperClass.Parameters {
    int b;
  }
}

观察超类构造函数参数“?extends”的区别。