2.4.1、泛型的介绍和代码实例

 

大纲:0.0、android学习笔记_大纲

源码地址:https://github.com/ldy1993/ToolforAS.git

1、泛型介绍和使用

为什么要使用泛型,我们的接口或者抽象类,里面的方法的参数,方法的返回值,变量的修饰类型不确定且又是object的派生类

我们通常用一个符号来代替这个不确定的类。一般约定俗成如下。

  •  E — Element,常用在java Collection里,如:List<E>,Iterator<E>,Set<E>
  •  K,V — Key,Value,代表Map的键值对
  •  N — Number,数字
  •  T — Type,类型,如String,Integer等等

我们可以看到实例如下

/**
 * 泛型的接口类
 * @param <T>
 * @param <E>
 * @param <K>
 * @param <V>
 */
public interface IGenerics<T,E,K,V> {
    T add(E e);
    void put(K key,V value);
}
/**
 * 泛型的抽象类
 * @param <T>
 * @param <E>
 * @param <V>
 */
public abstract class AGenerics<T,E,V> implements IGenerics<T,E,Integer,V> {
    @Override
    public T add(E e) {
        return null;
    }

    @Override
    public void put(Integer key, V value) {

    }
}
/**
 * 泛型的实现类
 */
public class Generics extends AGenerics<String,String,String> {
    @Override
    public String add(String o) {
        return null;
    }

    @Override
    public void put(Integer key, String value) {

    }
}

2、通配符

通配符的意义就是它是一个未知的符号,可以是代表任意的类。用于填充T的实现类,他与T的区别在于,T是接口或者抽象类中的一个符号,而他是表示真正使用过程中要填入的值。他不可以用于实现类,而是需要用于实例化后的对象。

2.1、<? extends T> 上界通配符

上界通配符顾名思义,类似继承,<?>没有任何限制,而<? extends T>表示通配的参数化类型可能是T或T的子类。如下

代码中第一个错误,正常子类是无法通配一个父类的泛型。<? extends 父类>来表示这个泛型是类似继承父类,而可以通配这个父类的子类。

其次对于一个通配符继承了基类的类来说,他无法确定set值是哪个实现类,所以无法使用set方法

2.2、<? super T> 下界通配符

下界通配符<? super T>表示的是参数化类型是T的超类型(包含自身),层层至上,直至Object,编译器无从判断get()返回的对象的类型是什么,因此get()方法受限。但是可以进行set()方法.

如果说 <? extends XXX>指填充为派生于XXX的任意子类的话,那么<? super XXX>则表示填充为任意XXX的父类!


3、Class<T>类传递

//SuccessModel.class不是泛型
public static List<SuccessModel> parseArray(String response){  
    List<SuccessModel> modelList = JSON.parseArray(response, SuccessModel.class);  
    return modelList;  
} 
//SuccessModel.class转化成泛型
public static <T> List<T> parseArray(String response,Class<T> object){  
    List<T> modelList = JSON.parseArray(response, object);  
    return modelList;  
}  

4、泛型数组

简单的代码距离说明。其中 T...代表可变参数。

/**
 * 泛型的接口类
 * @param <T>
 * @param <E>
 * @param <K>
 * @param <V>
 */
public interface IGenerics<T,E,K,V> {
    T[] add(E... e);
    void put(K key,V value);
}

/**
 * 泛型的抽象类
 * @param <T>
 * @param <E>
 * @param <V>
 */
public abstract class AGenerics<T,E,V> implements IGenerics<T,E,Integer,V> {
    @Override
    public T[] add(E... e) {
        return null;
    }

    @Override
    public void put(Integer key, V value) {

    }
}
/**
 * 泛型的实现类
 */
public class Generics<T> extends AGenerics<String,String,String> {
    private T item;
    public Generics(T t){item=t;}
    public void set(T t){item=t;}
    public T get(){return item;}
    @Override
    public String[] add(String... e) {
        for (String s : e) {
            Log.e("tag",s);
        }
        return null;
    }

    @Override
    public void put(Integer key, String value) {

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 简介 第一篇 基础与提高  实例1利用库函数编写基本显示程序  实例2变量属性  实例3运算符与类型  实例4关于程序结构  实例5显示函数曲线图  实例6二分法选代的应用  实例7多变的立方体  实例8一维整型数组应用(1)  实例9一维整型数组应用(2)  实例10一维整型数组应用(3)  实例11一维整型数组应用(4)  实例12二维数组应用(1)——显示杨辉三角  实例13二维数组应用(2)——魔方阵  实例14字符数组应用(1)——逻辑判断  实例15字符数组应用(2)——数据模拟  实例16二维数组应用——字符比较   实例17利用指针进行数据处理  实例18指针与字符串  实例19利用指针处理二维数组  实例20一级指针  实例21利用指针传递参数值  实例22结构体的应用  实例23链表的应用(1)  实例24链表的应用(2)  实例25链表的应用(3)  实例26共用体的应用  实例27枚举类型应用  实例28位运算  买例29义件加密  实例30文件的按记录随机读写 第二篇 图形与多媒体  实例31改变文字背景色  实例32及本颜色设置  实例33制作表格  实例34制作多样的椭圆  实例35美丽的透视图形  实例36错位窗口  实例37能移动的矩形  实例38多变的填充矩形  实例39黄黑相间的矩形与圆  实例40六叶图案  实例41特殊图案  实例42国际象棋棋盘  实例43制作楼梯  实例44使用线类型函数设置多个汉字  实例45彩色群点  实例46饼图  买例47产品折线图  实例48直方图  实例49变大变色的拒形与国  实例50多变的填充多边形  实例51流星球  实例52小球动态碰撞  买倒53多,曲线  实例54多变的圆与环  实例55优美的球体  实例56运动的小车  实例57统计动画消失次数  实例58运行的时钟  实例59直升飞机  实例60演绎“生命游戏”  实例61猜猜看  买例62艺术清屏  买倒63制作火焰  实例64动态绘制256条不同颜色的直线  实例65红绿蓝三原色渐变 第三篇 综合小程序  实例66两个矩阵相乘  实例67艺术钟  实例68家庭财务管理小程序  实例69用系统时间实现随机数  实例70闪动的多彩圆  实例71检查系统有无鼠标  实例72圆形光盘与矩形  实例73动态渐变图案  实例74往返两地间的小车  实例75飘扬的红旗  实例76显示蓝天白云图形  实例77百叶窗 第四篇 计算机等级考试上机试题(二级) 第五篇 计算机等级考试上机试题(三级)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值