java - 如何修复 "unchecked call to ' AttachView(V )' as a member of raw type ' BasePresenter'"?

标签 java android generics mvp dagger-2

我已经在这里查找了有关此问题的许多答案,但在我的一生中,我似乎无法解决这个问题,我需要一些帮助。

BasePresenter:

public abstract class BasePresenter<V> {

    private V mView;

    public void attachView(V view) { mView = view; }
    public void detachView() { mView = null; }

}

基础 fragment :

public abstract class BaseFragment<P extends BasePresenter> extends Fragment {

    @Inject protected P mPresenter;

    @Override
    public void onResume() {
        super.onResume();
        mPresenter.attachView(this); // unchecked call to 'attachView(V)' as a member of raw type 'BasePresenter'
    }

    @Override
    public void onPause() {
        super.onPause();
        mPresenter.detachView();
    }

}

我的演示者:

public class MyPresenter extends BasePresenter<MyPresenter.MyView> {

    @Inject
    public MyPresenter() {}

    public interface MyView {}

}

我的 fragment :

public class MyFragment extends BaseFragment implements MyPresenter.MyView {}

最佳答案

问题出在类型变量声明中:

class BaseFragment<P extends BasePresenter>

BasePresenter是一个泛型类,因此您需要指定它的类型参数是什么。从这个 fragment :

mPresenter.attachView(this);

您似乎希望 BaseFragment 绑定(bind)到 BasePresenter 中的类型变量 V - 因此我将重写您的 BaseFragment 声明,如下所示:

abstract class BaseFragment<P extends BasePresenter<BaseFragment<P>>> { ... }

这应该可以解决未经检查的警告。也就是说,我强烈怀疑你真正想要的是这样的:

abstract class BaseFragment<P extends BasePresenter<V>, V> { ... }

其中 V 是对“ View ”进行建模的独立类型变量。

关于java - 如何修复 "unchecked call to ' AttachView(V )' as a member of raw type ' BasePresenter'"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485043/

相关文章:

java - 使用 GWT 进行图像平移和缩放

java - Hibernate:删除实体网络中的实体

java - 将包含数组的字符串转换为数组对象

Java Generic - 找不到对象方法

java - c++ 等价于 java 中的无符号算术

android - PrintManager.print() 并更改了 attachBaseContext 中的语言环境

android - 在xml编辑器中切换字符串资源的引用和值预览

android map 绘制自定义标记

java - 对于不扩展 Enum 的泛型,Enum.valueOf 的替代品?

java - 扩展通用类的原始类型警告