【问题标题】:MVP pattern for retriving model用于检索模型的 MVP 模式
【发布时间】:2017-11-29 17:14:41
【问题描述】:

我正在使用 MVP 模式开发一个 Android 应用程序。

我希望有不同的演示者,每个演示者都实现 getItems,它们调用关联模型的 getAll 静态方法。 我想使用泛型,结果是这样的:

public class BasePresenter<T> {
   protected T mModel;

   List getItems() {
       mModel.getAll();
   }
}

public class Presenter extends BasePresenter<Model> {
}

但我无法使用泛型访问getAll 方法,因为它不是Object 的方法。

因为对我来说,为所有演示者编写相同的无聊方法getAll() 是愚蠢的,只改变模型,有没有办法做到这一点?

我问这个问题是因为即使在 Google 的官方 MVP 指南中,它也总是使用相同的方法来检索数据,并在每个演示者上覆盖它,我希望有更好的方法。

我想“转换”超类 mModel,但我不知道如何以及是否可以这样做。

【问题讨论】:

    标签: java android generics mvp superclass


    【解决方案1】:

    试试这个

    public class BasePresenter<M extends BaseModel<M>> {
    
        @Nullable
        private M mModel;
    
        @Nullable List<M> getItems() {
            if (mModel != null) {
                return mModel.getModelList();
            }
            return null;
        }
    }
    

    BaseModel 是

     public abstract class BaseModel<M> {
    
            private List<M> modelList;
    
            public List<M> getModelList() {
                return modelList;
            }
    
            public void setModelList(List<M> modelList) {
                this.modelList = modelList;
            }
        }
    

    子模型

    public class LoginModel extends BaseModel<LoginModel> {
    
        @Override
        public List<LoginModel> getModelList() {
            return super.getModelList();
        }
    
        @Override
        public void setModelList(List<LoginModel> modelList) {
            super.setModelList(modelList);
        }
    }
    

    最后presenter是这样的

    public class LoginPresenter extends BasePresenter<LoginModel> {
            //do your code
    }
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      也许这可以帮助你:

      List getItems(){
          if(mModel instanceof TheSuperClassOrInterface){
              return ((TheSuperClassOrInterface)mModel).getAll();
          }else{
              return null;
          }
      } 
      

      【讨论】:

      • 在这种情况下,我必须为每个模型添加一个 if
      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2017-10-26
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多