泛型
1.什么是泛型?
- Java泛型的设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常
- 泛型:把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型,泛型即参数化类型
- 参数化类型:
- 把类型当作是参数一样传递
- <数据类型> 只能是引用类型
2. 为什么需要泛型?
- 早期的Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序就不安全
- 首先,我们来试想一下,没有泛型,集合会怎么样?
- Collection、Map集合对元素的类型是没有任何限制的,本来我的Collection集合装载的是Dog对象,但是外边把Cat对象存储到集合中,是没有任何语法错误的。
- 把对象扔进集合中,集合不知道元素的类型是什么的,仅仅知道是Object。因此在get()的时候,返回的是Object,外边在获取该对象时,需要进行强制类型转换。
- 有了泛型之后:
- 代码更加的简洁(不需要进行强制类型转换)
- 程序更加的健壮(只要编译器没有警告,那么运行时期就不会出现ClassCastException异常)
- 可读性和稳定性更强(在编写集合的时候就限定了类型)
- 可以使用增强型for进行遍历集合(foreach在jdk5.0之后出现)
3.什么是泛型擦除?
- 泛型是提供给javac编译器使用的,它用于限定集合的输入类型,挡住向集合中插入非法数据。
- 但编译器编译完带有泛型的Java程序之后,生成的class文件中将不再带有泛型信息,以此使程序运行效率不受到影响,这个过程称之为泛型擦除。
4.泛型的使用?
- 泛型类
- 各种容器类:List,Set,Map
- 泛型接口
- 泛型方法