我添加了新的全局高层接口(interface):
public interface MvpView {
}
我的高级界面:
public interface OfferDetailsView extends MvpView {
public void showProgress();
}
另一个接口(interface):
public interface OfferDetailsPdfMvp {
interface View extends OfferDetailsView {
public void openLocalPdfFile(File file, int pageNumber);
}
interface Presenter extends OfferDetailsPresenter {
public void onPageScrolled(int page, int pageCount);
}
}
另一个接口(interface):
public interface OfferDetailsPresenter extends MvpPresenter {
public void downloadToAppDir(boolean isDownloadToAppCacheDir);
public void onClickScreen(boolean isVisibleTopContainer);
}
另一个接口(interface):
public interface MvpPresenter<V extends MvpView> {
public void attachView(V mvpView);
}
基础抽象类:
public abstract class BaseOfferDetailsPresenter<T extends MvpView> implements MvpPresenter<T> {
private T view;
@Override
public void attachView(T mvpView) {
this.view = mvpView;
}
public T getView() {
return view;
}
}
以及从基类扩展的具体类:
public class OfferDetailsPdfPresenterImpl extends BaseOfferDetailsPresenter<OfferDetailsPdfMvp.View> implements OfferDetailsPdfMvp.Presenter {
public void viewIsReady() {
getView().showProgress(); //no cast
getView().openLocalPdfFile(file, currentPageNumber); // no cast
}
但是我得到了编译错误:
myproject\app\src\main\java\com\myproject\android\customer\presenter\OfferDetailsPdfPresenterImpl.java:35: error: MvpPresenter cannot be inherited with different arguments: <> and <com.myproject.android.customer.mvp.OfferDetailsPdfMvp.View>
public class OfferDetailsPdfPresenterImpl extends BaseOfferDetailsPresenter<OfferDetailsPdfMvp.View> implements OfferDetailsPdfMvp.Presenter {
最佳答案
要做出你想要的,你应该改变你的OfferDetailsPresenter
签名:
public interface OfferDetailsPresenter<T extends MvpView> extends MvpPresenter<T> {
void downloadToAppDir(boolean isDownloadToAppCacheDir);
void onClickScreen(boolean isVisibleTopContainer);
}
然后,在OfferDetailsPdfMvp
里面你应该改变Presenter
以同样的方式签名:
public interface OfferDetailsPdfMvp {
interface View extends OfferDetailsView {
public void openLocalPdfFile(File file, int pageNumber);
}
interface Presenter<T extends MvpView> extends OfferDetailsPresenter<T> {
public void onPageScrolled(int page, int pageCount);
}
}
然后填充所需的View
就像你处理 BaseOfferDetailsPresenter<T extends MvpView>
一样:
OfferDetailsPdfPresenterImpl extends BaseOfferDetailsPresenter<OfferDetailsPdfMvp.View> implements OfferDetailsPdfMvp.Presenter<OfferDetailsPdfMvp.View>
关于java - 如何避免类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675190/