2017-11-15 3 views
2

Ich möchte Implementierungen meiner generischen Schnittstelle über Konstruktor injizieren.Dolch 2 Injizieren generische Schnittstellenimplementierungen

Dies ist meine Schnittstelle

public interface BaseValidator<T> { boolean isValid(T t); }

Erste Implementierung

public class FirstValidator implements BaseValidator<String> { 

@Override 
public boolean isValid(String string) { 
    // code here 
} 

Zweite Implementierung

public class SecondValidator implements BaseValidator<Int> { 

@Override 
public boolean isValid(Int int) { 
    // code here 
} 

Mein in Validierungsmodul

bietet
@Provides 
@Singleton 
@Named("FirstValidator") 
public BaseValidator<String> provideFirstValidator(){ 
    return new FirstValidator(); 
} 

@Provides 
@Singleton 
@Named("SecondValidator") 
public BaseValidator<Int> provideSecondValidator(){ 
    return new SecondValidator(); 
} 

Und dann, wenn ich versuche, es wie dieser Fehler

private BaseValidator<String> mFirstValidator; 

@Inject 
public MainPresenter(@Named("FirstValidator") BaseValidator<String> firstValidator) { 
    this.mFirstValidator = firstValidator; 
} 

zu injizieren

error: [dagger.android.AndroidInjector.inject(T)] BaseValidator<java.lang.String> cannot be provided without an @Provides-annotated method. 

Wie kann ich meine Implementierungen generische Schnittstelle zu jeder Klasse injizieren? Es wirft

Antwort

0

Sie müssen den Operator instance of verwenden, um zu überprüfen, ob String-Typ oder Integer gültig ist.

+0

Können Sie erklären, wie Sie es in meinem Code erreichen? – DigitalGrape