java - 如何避免类型转换?

标签 java android

我添加了新的全局高层接口(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/

相关文章:

java - GWT 2.6 super 开发模式是否支持热插拔(重新编译)以及如何支持?

java - 将对象添加到另一个数组列表内的数组列表

java - 如何使用 Apache POI 将 300 万行写入 Excel 文件

java - 如何将全局枚举呈现为多个类的子类?

android - 错误 : MainActivity must extend android. app.Activity [可实例化]

java - 在 ChannelInboundHandler.channelRead 中执行长操作是否可以

android - Android Flipboard样式的动画

android - 如何从 Android 应用程序打开电话簿?

安卓子网扫描

android - 如何在android中为形状制作3边的笔触?