美文网首页AndroidAndroid开发经验谈Android开发
Android开发架构模型(三)泛型类、接口的使用及实战案例

Android开发架构模型(三)泛型类、接口的使用及实战案例

作者: 任珉豪 | 来源:发表于2017-09-25 17:27 被阅读128次
前方高能

什么是泛型

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

泛型的作用

比如大家常用的 ArrayList等,通过注入相应的参数,可承载不同的类和对象,当类型不匹配时会报错,某种程度上提高了编码的安全性。

学习的目的

泛型的使用不仅使你的应用提高了安全性,同时能够减少代码的编码量,使你的代码更加简洁、规范。

泛型有哪些使用技巧

泛型接口、类,泛型函数,Class<T>,泛型数组,类型绑定,通配符等。

泛型类与接口的使用

使用场景一:MVP结构中基类的使用,下面以自己开发MVP基础框架为例子,MVP模型不清楚的请移步Android标准式MVP架构模型(无内存泄漏、M层可复用),里面有使用方法及项目源码。

下面看下BasePresenter的代码

  public class BasePresenter <V>  {
public BaseMvpActivity mContext;

public BasePresenter(BaseMvpActivity context) {
    mContext = context;
}

protected Reference<V> mViewRef;

public void attachView(V view) {
    mViewRef = new WeakReference<V>(view);
}

public boolean isViewAttached() {
    return mViewRef != null && mViewRef.get() != null;
}

public void detachView() {
    if (mViewRef != null) {
        mViewRef.clear();
        mViewRef = null;
    }
}

public V getView() {
    return mViewRef != null ? mViewRef.get() : null;
}
  }

这里的BasePresenter <V>就是一个泛型类。

看下使用时的代码。

  public class GSYPlayerPresenter extends BasePresenter<IGSYPlayerActivity>

继承的时候会传入一个对象,这个对象是 V层实现的接口,在BasePresenter中主要是将这个类弱引用化。

通过泛型类,就可实现一定的封装性,可根据传入的参数进行定制化。

使用场景二:可以封装网络层,比如网络返回的Json字符串,通常是要转化成对应的对象,那么我们可以对网络做二次封装,通过传入相应的对象,让网络层直接返回我们想要的对象,而不是返回字符串再每个接口去做转对象的操作。

先看下使用效果:

  loginRequest.buildGateway(true).requestGateway(new HttpRequestListener<HotTopicMapper>() {
        @Override
        public void onHttpSuccessResponse(String statusCode, HotTopicMapper result) {
            callBack.success(result);
        }

        @Override
        public void onHttpErrorResponse(String exceptionCode, String errorMsg) {
            callBack.error(errorMsg);
        }
    },HotTopicMapper.class);

接口IOC回调onHttpSuccessResponse方法,返回的就是我们要的对象。

如果不用泛型是什么呢?

  loginRequest.buildGateway().requestGateway(new HttpRequestListener() {
        @Override
        public void onHttpSuccessResponse(String statusCode, Object result) {
            HotTopicMapper Mapper = (HotTopicMapper) result;
            callBack.success(Mapper);
        }

        @Override
        public void onHttpErrorResponse(String exceptionCode, String errorMsg) {
            callBack.error(errorMsg);
        }
    }, HotTopicMapper.class);

可看到onHttpSuccessResponse方法IOC回调中,每次都要强转成自己想要的类型,是不是没有上面的优雅。

看下HttpRequestListener类的定义。

  public interface HttpRequestListener<T> {
void onHttpSuccessResponse(String statusCode, T result);
void onHttpErrorResponse(String exceptionCode, String errorMsg);
}

这实际上就是自定义的 泛型接口

总结:泛型掌握好是必须的,使用熟练会在编码上提升很高的层次,可加群 136705426 跟着谷歌混饭吃。

相关文章

  • Android开发架构模型(三)泛型类、接口的使用及实战案例

    什么是泛型 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • typescript入门-泛型

    基础定义 泛型接口 泛型类 泛型约束 使用类类型

  • 想理解泛型吗?看这一篇就够了!

    一、前言二、泛型类2.1 概述Java中泛型使用情况大致包括三种:泛型类、泛型接口、泛型方法 本节演示泛型类。 2...

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • 泛型

    问题引入 泛型引入 如果使用泛型类或接口的时候,用Object 通配符 不设置方法类型 泛型接口 定义接口泛型 在...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

  • 夯实JAVA基础之 - 泛型

    泛型的定义及使用 1. 定义泛型: 2. 类中使用泛型 3. 使用泛型类 4. 使用泛型的优势? 多泛型变量的定义...

  • 泛型介绍

    各种泛型定义及使用 1、泛型类定义及使用 我们先看看泛型的类是怎么定义的: [java]view plaincop...

  • 泛型简单的应用总结:

    泛型可以应用在类,方法,接口中,可以定义泛型类,泛型方法,泛型接口三种 利用泛型的好处: 可以有效的减少代...

网友评论

    本文标题:Android开发架构模型(三)泛型类、接口的使用及实战案例

    本文链接:https://www.haomeiwen.com/subject/bzddextx.html