1

コンストラクターで渡される (/プロバイダーとして注入される) 独自のネストされたクラスを持つスーパークラスがあります。

同様に、コンストラクターに (プロバイダーとして) 注入される独自のネストされたクラスを持つサブクラスがあります。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 のプロバイダーを SuperClass.Parameters のプロバイダーに変換して、Sub のコンストラクターで (そのプロバイダーで) super を呼び出すことができる方法はありますか?

4

1 に答える 1

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」の違いを確認してください。

于 2012-04-13T14:59:10.897 に答える