2
ジェネリックインターフェースのインプリメンテーションをコンストラクター経由で挿入したいと思います。ダガー2ジェネリックインターフェースのインプリメンテーション
これは私のインターフェイス
public interface BaseValidator<T> { boolean isValid(T t); }
最初の実装
public class FirstValidator implements BaseValidator<String> {
@Override
public boolean isValid(String string) {
// code here
}
第2の実施
public class SecondValidator implements BaseValidator<Int> {
@Override
public boolean isValid(Int int) {
// code here
}
私の検証モジュールに
を提供しています@Provides
@Singleton
@Named("FirstValidator")
public BaseValidator<String> provideFirstValidator(){
return new FirstValidator();
}
@Provides
@Singleton
@Named("SecondValidator")
public BaseValidator<Int> provideSecondValidator(){
return new SecondValidator();
}
そして、私はこの
private BaseValidator<String> mFirstValidator;
@Inject
public MainPresenter(@Named("FirstValidator") BaseValidator<String> firstValidator) {
this.mFirstValidator = firstValidator;
}
のようにそれを注入しようとすると、それは私がどのクラスにも汎用インタフェースの私の実装を注入することができますどのようにエラー
error: [dagger.android.AndroidInjector.inject(T)] BaseValidator<java.lang.String> cannot be provided without an @Provides-annotated method.
を投げますか?
私のコードでそれを達成する方法を説明できますか? – DigitalGrape