Dagger 2注入通用接口实现

时间:2017-11-15 07:09:03

标签: java android generics dagger-2

我想通过构造函数注入我的通用接口的实现。

这是我的界面

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

首次实施

public class FirstValidator implements BaseValidator<String> {

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

第二次实施

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.

如何将我的通用接口实现注入任何类?

1 个答案:

答案 0 :(得分:0)

您需要使用instance of运算符来检查字符串类型或整数然后验证。