泛型
一、理论基础
概念:
jdk1.5出现的安全机制;
编译时:泛型技术是给编译器使用的技术,确保类型安全。
运行时:会将泛型去掉,生成的class文件时不带泛型的-- 成为泛型擦除
(1)为什么会擦除?
为了兼容运行的类加载器,(jdk1.5之后引入了泛型,但与之对应的运行的类加载器没有升级)
当然,并不是每一个泛型参数被擦除类型后都会变成 Object 类。对于限定了继承类的泛型参数,经过类型擦除后,所有的泛型参数都将变成所限定的继承类。也就是说,Java 编译器将选取该泛型所能指代的所有类中层次最高的那个,作为替换泛型的类。
(2)什么是泛型补偿/转换?
在运行时,通过获取元素的类型进行转换的工作,无需使用者再强制转换。
(编译器只做检查,编译后类型被擦除,所以泛型内部存的还是Object, 为了避免强转,在类加载器基础上引入补偿机制,根据指定的元素类型,对其进行一次转换。)
好处:
- 将运行时期的问题classCastException转到了编译时期。
- 避免了强制转换的麻烦
既然泛型会被类型擦除,那么我们还有必要用它吗?
我认为