一看就懂的“什么是XXX“系列--什么是泛型

作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]

在这里插入图片描述

泛型(Generics)不管在面试还是实际开发过程中都有高频率的应用,本文将带读者复习或更深层次的了解泛型的概念以及其底层原理

 

读者的收获

1、理解什么是泛型

2、泛型的底层原理

3、泛型的应用

4、通配符、边界的概念

码文不易
你的关注是浩说编程持续更新的动力
浩说编程会做的更好

 

泛型的概念

泛型,官方解释叫做“参数化类型”。通俗的意思就是:将类、方法、变量的类型以参数的形式定义,然后在使用到对应类、方法、变量的时候再传入具体的类型。

概念比较抽象且不好理解,下面我通过具体实例应用来给读者作解释:

 

泛型的应用–集合

众所周知的定义集合的语法:List<> stringList = new ArrayList<>();
图片

但是你是否清楚List后为何要用"<>"符号,为什么要这样写?其实这个“<>”就是指泛型。我将List接口源码拷过来给大家看一下泛型是如何定义的:
图片
定义方式很简单,就是 ‘<>’ ,中间的E叫做泛型中的通配符。
 

关于‘通配符’ :T、E、K、U、?

通配符常用的有以上几种,严格来说这些字母并无区别,只不过是java为我们制定的一种编码规范,就像是命名要驼峰一样。其实通配符写什么都可以,只是编码规范为上面这几个字母赋予了不同的意义:

?:不确定的java类型

T : 表示一个java类型

K : java键值中的key

V : java键值中的value

E :集合中专用

**由’通配符’延申的’边界’的概念
**

通配符的另外一种写法叫做’边界通配符’:

1、<T extends H> : 上界通配符(extends),意思是该泛型可以容纳的类型参数只有H类以及H类下派生的子类

2、<T super H> : 下界通配符(super),意思是该泛型可以容纳的类型参数只有H类以及以H基类的父类
 

泛型的底层原理

通过上面的例子读者了解了泛型的概念以及泛型的通配符边界,接下来给读者拆解一下泛型的底层原理。

java中的泛型只作用于编译期,原因是编译器将泛型类的.java文件编译成.class文件的时候,会对泛型进行擦除操作:
图片

对比一下可以看出:编译器将类型参数T替换为了固定类型Object类(Object类是所有类的默认父类,所以可以承接任何类型的对象)

结合一下上文提到的‘边界’的概念,将通配符T修改为T extends H,编译之后将被替换成H。这就是泛型的底层逻辑。

 

思考练习

通过以上的内容读者已经对泛型有了深刻的认识,本环节旨在通过问题的形式帮助读者加深理解:
图片

作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值