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