# 泛型
## 泛型概述
> 在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。
> 泛型其实可以看成一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型
> 泛型也可以看作一个变量,用来接收数据类型
![](%E6%B3%9B%E5%9E%8B/%E6%88%AA%E5%B1%8F2021-02-25%2011.19.07.png)
> 查看ArrayList源码,也会发现它在定义的时候使用的是泛型E,创建集合对象的时候,才会确定泛型的数据类型
![](%E6%B3%9B%E5%9E%8B/%E6%88%AA%E5%B1%8F2021-02-25%2011.23.45.png)
## 使用泛型的好处
* 创建集合对象,如果**不使用泛型**,有好处也有坏处
* 好处:集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据
* 弊端:不安全,会引发异常
> 比如往集合内添加字符串和整型数字,类型不一样(由于集合没有做任何限定,所以任何类型都可以存放)
> 我们可以使用迭代器遍历,取出的元素也都是Object类型
> 但是如果我们想要使用String类特有的方法,如Length获取字符串的长度,就不能使用了;因为这是多态,Object obj = “abc”,多态不能使用子类特有的方法,需要向�