Java基础知识——泛型初认识
引入泛型
对于Java中的那些已经封装好的类来说,肯定是不可能就只针对一个类型来的,比如说链表类,应该对所有的类型int,String,boolen都可以使用。但是我们是如何来解决可以对任意的类型都适用呢?就是用了我们今天要介绍的知识:泛型。
泛型的格式
对于类:
在类名后面加上一个<>,<>里面是类型变量。类型变量最好是大写的,如T,E等
![image-20220112145019010](https://gitee.com/luoxiangyu/picture-bed/raw/master/202201121601313.png)
泛型的原理
可能大家会疑惑,泛型在Java中是怎么实现的呀。
泛型的编译机制
泛型是在编译时期的事情,利用了擦除机制,也就是到了运行期间,根本就没有泛型这个东西了。那些类型都变成object了
泛型的意义
- 自动对类型进行检查
要是指定了泛型,就只能指定同一类型的变量
- 自动对类型进行强制类型转换
因为其实在内部是Object的,使用了泛型就自动的进行了类型转换
关于Object[]和数组
这部分内容参考了这篇博客[Object强制类型转换]([关于Object] 强制类型转换的思考 - 简书 (jianshu.com))
我们知道,在泛型的内部其实就是转换成了Object[]类型,但是在碰到数组的时候要千万注意一下。
在Java中,数组是一个非常特殊的存在,因为数组在Java是一个类。所以,像int[],Object[],String[]都是类。
这些类全部是Object的子类。
所以,不要认为Object[]和int[]是父子关系,它们是平级的!
并且,int[]类里面就只可以存放int类型
但是,Object[]类因为是由Object组成的,所以可以存放其他类型的类
![image-20220112155249368](https://gitee.com/luoxiangyu/picture-bed/raw/master/202201121601323.png)
如果将Object[]强制类型转换成Coffee[]类会怎么样?
结果会抛出异常——Object不可以强制类型转换成Coffee类型
所以,我们千万要注意:
- 不可以将别的类型数组赋给Object数组
- 不可以将Object类型数组强制转化