java - 在 Mosby 和 Dagger 2 的 Base Presenter 中使用泛型

标签 java android dagger-2 mosby

我正在尝试在 Dagger 2 中使用 Mosby 的 MvpBasePresenter 设置一个 Base Presenter 我有以下基本组件:

public interface BaseViewComponent<V extends BaseView, P extends BasePresenter> {
    void injectView(V object);

    void injectPresenter(P object);

    P getPresenter();
}

使用以下 BasePresenter

public class BasePresenter <V extends BaseView> extends MvpBasePresenter {
    @Inject public BasePresenter () {

    }
}

和下面的BaseActivity

public abstract class BaseActivity<P extends BasePresenter, C extends BaseViewComponent> extends MvpActivity implements BaseView<P> {

@Inject C mComponent;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getViewContentId() != 0) {
        setContentView(getViewContentId());
        ButterKnife.bind(this);
    }

}

@Override
public P createPresenter() {
    return mComponent.getPresenter();
}
}

出于某种原因,创建演示者显示为返回类型 BasePresenter 而不是类型 P,即使组件 getPresenter 返回 P。有人有任何见解吗?这甚至是一个好主意吗?

最佳答案

我的初步猜测如下,类似于this

public interface BaseViewComponent<V extends BaseView<V, P>, P extends BasePresenter<V, P>> {
    void injectView(V object);

    void injectPresenter(P object);

    P getPresenter();
}

public class BasePresenter<V extends BaseView<V, P>, P extends BasePresenter<V, P>> extends MvpBasePresenter {
    @Inject public BasePresenter () {

    }
}

public abstract class BaseActivity<V extends BaseView<V, P>, P extends BasePresenter<V, P>, C extends BaseViewComponent<V, P>> 
    extends MvpActivity 
    implements BaseView<V, P> {

@Inject C mComponent;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getViewContentId() != 0) {
        setContentView(getViewContentId());
        ButterKnife.bind(this);
    }

}

@Override
public P createPresenter() {
    return mComponent.getPresenter();
}
}

关于java - 在 Mosby 和 Dagger 2 的 Base Presenter 中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34304413/

相关文章:

java - Android 上的 Dagger 2。存储和访问 @Singleton 组件的不同方式

java - 用于空间分区的四叉树 (Java)

java - ClassFormatError : 154>, Display 类中捕获异常

Android 9 和 Apache HTTP 的缺失

kotlin - 注入(inject)不适用于第二个构造函数

android - 无法使用 Dagger 2 注入(inject)类

java - java将罗马数字转换为数字逻辑错误

java - 方法重载是一种多态性吗?

android - 如何在 Flutter 中将文件从本地存储导入到数据库中

Javascript Prompt() 在 Android 浏览器中出现暗淡(微弱)的提示消息