2017-11-15 11 views
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. 

を投げますか?

答えて

0

オペレータを使用してチェックするにはinstance ofオペレータを使用する必要があります。これはString型かInteger型かを検証します。

+0

私のコードでそれを達成する方法を説明できますか? – DigitalGrape

関連する問題