泛型的总结

1,基本概念

为什么使用泛型

泛型的本质便是类型参数化,通俗的说就是用一个变量来表示类型,这个类型可以是String,Integer等等不确定,表明可接受的类型,
基本概念
泛型最长用于集合如set,map list,Threadlocal AtomicReference 尽量使用泛型
对于有限制的类型通配符 可用 PECS作为帮助记忆
PECS表示:producer-extends ,Consumer-supper
如果参数化类型是一个T生产者,就使用<? extends T>
如果参数化类型是一个T消费者,就使用<? super T>

生产数据

消费数据
如例子:

  public String getSomething();
  public void setConfig(String sth);
}

public interface GerOpera<T> {
     public T getSomething();  
     public void setConfig(T sth);
}

2,在mvp中的使用

public interface BaseViewI<V> {

    /**
     * 数据加载失败
     * tag==1,正常错误,可以只显示toast
     * tag=0,非正常错误,需要考虑显示错误界面
     * */
    void showDataError(String errorMessage, int tag);

    /**
     *数据加载成功
     * */
    void showDataSuccess(V datas);
    /**
     * 显示加载进度
     * */
    void showProgress();

    /**
     * 显示加载进度
     * */
    void hideProgress();

    /**
     * 点击重新加载
     * */
    void onReload();
    /**
     * 显示加载中视图
     * */
    void showLoadingView();

    /**
     *  显示无网络视图
     * */
    void showNetErrorView();

    /**
     *   没有加载到内容
     * */
    void showEmptyView(String msg);
    /**
     * 显示内容View
     * */
    void showContent();
}


public interface BasePresenterI {
    /**
     * 判断网络连接
     * */
    boolean checkNetWork(Context context);

    void unsubcrible();
}

public class BasePresenter<V extends BaseViewI> implements BasePresenterI {
   public V mView;
    public Context context;
    private CompositeSubscription mCompositeSubscription;

    @Override
    public boolean checkNetWork(Context context) {
        if(!NetUtil.isNetworkAvailable()) {
            ToastShow.getInstance(context).toastShow("网络不给力");
        }
        return NetUtil.isNetworkAvailable();
    }


    public void attachView(V view,Context context) {
        this.mView = view;
        this.context=context;
    }


    /**
     * 事件订阅
     * */
    public void addSubscription(Subscription s) {
        if (this.mCompositeSubscription == null) {
            this.mCompositeSubscription = new CompositeSubscription();
        }
        this.mCompositeSubscription.add(s);
    }

   /**
     * 取消事件订阅
     * */
    @Override
    public void unsubcrible() {
        if (this.mCompositeSubscription != null) {
            this.mCompositeSubscription.unsubscribe();
        }
        mView=null;
        context=null;
        this.mCompositeSubscription=null;
    }
}
在Fragment可这样使用
public abstract class BaseFragment<T extends BasePresenterI,V> extends Fragment implements BaseViewI<V>{}
在Activity中可这样使用
public abstract class BaseActivity<T extends BasePresenterI, V> extends AutoLayoutActivity implements BaseViewI<V> {}

如下面的例子所示
具体的fragment实现
public class DemoFragment extends BaseFragment<HomePresenter, List<BrandBean>> implements HomeContract.View {}
具体的Activiy实现
public abstract class BaseActivity<T extends BasePresenterI, V> extends Activity implements BaseViewI<V>{}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值