用Dagger注入泛型类

Mal*_*han 14 android dependency-injection dagger

我的项目中有一个抽象基类

public abstract class BaseActivity<T extends BasePresenter<? extends IBaseView>> implements IBaseView{
Run Code Online (Sandbox Code Playgroud)

我尝试注入这样的泛型类:

@Inject protected T mPresenter; 
Run Code Online (Sandbox Code Playgroud)

有没有办法让匕首与这种通用注射一起工作?Dagger生成如下代码:

public final class BaseActivity$$InjectAdapter extends Binding<BaseActivity>
implements MembersInjector<BaseActivity> {
    private Binding<T> mPresenter;
}
Run Code Online (Sandbox Code Playgroud)

然后失败因为"T无法解析为某种类型".有没有办法让它生成一个

Binding<SomethingExtendingBasePresenter> mPresenter
Run Code Online (Sandbox Code Playgroud)

在这种情况下?

小智 1

我知道的唯一方法是创建一个扩展泛型的新类。您感兴趣的每种类型都有一个。

public class Foo extends BaseActivity<SomethingExtendingBasePresenter> {
}

@Inject
Foo mFoo;
Run Code Online (Sandbox Code Playgroud)