【发布时间】:2017-07-12 11:09:11
【问题描述】:
我正在使用 MVP 架构实现一个简单的应用程序。
这是我的MvpView 和MvpPresenter 接口(@987654326@ 没什么有趣的,所以我跳过它):
/// MvpView.java
public interface MvpView {
}
/// MvpPresenter.java
public interface MvpPresenter<V extends MvpView> {
void attachView(V view);
void detachView();
}
现在我有一个基本的MvpView 实现,即Activity:
// BaseActivity.java
public abstract class BaseActivity<V extends MvpView, P extends MvpPresenter<V>>
extends AppCompatActivity implements MvpView {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPresenter().attachView(this);
}
public abstract P getPresenter();
// other logic
}
对我来说一切看起来都是正确的,但是有一个编译错误:
getPresenter().attachView(this);
如果我将演员表添加到 V 然后项目编译并且一切正常:
getPresenter().attachView((V) this);
1。问题是为什么我需要这个演员表或为什么我在没有演员表的情况下会遇到这种不兼容的类型错误?
(1 已被Eran 回答)
2。在此示例中,我如何将 V 链接到 BaseActivity,或者如何更好地实施这种 MVP 方法?
对我来说这很奇怪,因为我的BaseActivity 扩展了MvpView,因为它是由这个通用参数定义的:V extends MvpView!
【问题讨论】:
标签: java android generics types casting