Java基础之泛型

一、泛型的定义

        泛型的实质就是一个类型占位符  比如 T  W   E 等等   

        比如: List<String>list      HashMap<String,Integer> map; 等等

 二、泛型的应用

        // 为了确定数据添加的指定类型而加入的 

        List<String> list =new ArrayList<>();

        应用泛型类、泛型方法、泛型接口等等

三、泛型类

    当类中属性不确定是什么类型的时候,可以使用类型占位符来进行站位,先定义一个泛型类

这样咱们在New对象的时候可以传入自己需要的类型 

四、泛型的方法

    占位符T必须与类的占位符相同,要不然编译器会报错,只有在类中定义,才能用到方法

    当然,还有一种方法,可以不用在类中定义:

    如果方法返回值,类型也不确定,应该怎么写:

    那如果说泛型类的类型是T 方法是的类型是E 这样行不行呢?不报错,是可以的哈。泛型方法可以脱离泛型类中的指定类型。具体情况也是具体场景自有实现。

五、泛型接口

    如果接口中指定是T,需要与泛型类中也指定一个类型,需要一致。

    下面是一种内部类,如果impl<T> 是T  则 泛型类中也需要指定泛型是T

六、泛型的擦除模式

    那看一下这种情况是否一致?

    结果为true,那将t2的泛型改为Integer是否还能为True呢?是的 结果依然是true;这种就是泛型的擦除模式。在Java编译阶段,泛型是存在的,当处于反射阶段或者运行阶段,jvm会将泛型给取消掉,也就是擦除。为什么要有这样一个机制呢,就是为了兼容JDK老版本,不兼容会造成不共用,也是版本迭代中的产物。

七、泛型的通配符以及泛型的上边界、下边界

    java中继承是有父子关系的,但泛型的继承关系是不承认的。

Integer 是继承了 Number的,看是否能向下向上转型进行相互赋值呢?

是的,这两个中间不互通。java中的继承关系,在泛型中不承认这种关系。这种情况就可以采用通配符 ? 来做。需要用通配符来进行重新绑定。

那直接看一下上边界  他的上边界就是 T 

这种代表什么意思呢?  这种就是可以传入 T 或者 T的子类  如果传入的是Number,可以传入Integer类型。

那下边界也是如此:

这种就是 传入的类型必须是 本身或者T的父类, 如果传入的是Integer  那可以传入 Integer 或者 Number;

那上边界跟下边界的应用场景怎么区分呢?什么时候用上边界,什么时候用下边界呢?

既要读取又要写入就不要用通配符了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载: https://blog.csdn.net/s10461/article/details/53941091...
    DaneYang阅读 500评论 1 6
  • 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要...
    小乖心塞阅读 363评论 1 2
  • 泛型概述以及泛型类 泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入; 泛型的核心: 告诉编译器...
    皮多堡阅读 710评论 0 0
  • Android知识总结[https://www.jianshu.com/p/01b1de0504d2] 一、泛型基...
    涛涛123759阅读 377评论 0 3
  • 泛型 体验泛型 没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中。使用泛型集合,可以将一...
    bo客先生阅读 750评论 0 8