Generic Programming
1. 什么是泛型?
一个泛型类就是具有一个或者多个类型参数(type parameter)的类。
我们可以把它看做是普通类的工厂,通过指定type parameter来实例化泛型类
2. 泛型的创新点?
在此之前,泛型实现靠继承。
随之而来的两个问题:
1. 对具体对象操作时必须进行强制类型转换,操作繁琐易出错!
2. 可以向数组列表中插入任何类的对象,即使并不兼容。在此基础上,使用强制类型转换出现异常!
3. 泛型方法
泛型类中的方法自然都是泛型方法,然,普通类中也可以有泛型方法
常见问题:编译器类型匹配出错
4. 类型变量的限定
示例:
语法:
1. 形式:<T extends BoundType>;
表示:T是BoundType的子类型
要求:T和BoundType是类/接口
2. T extends Comparable &Serializable可以有多个接口超类型,但至多有一个基类
3. 如果用一个基类用作限定,必须是限定列表中的第一个
5. 泛型代码在虚拟机中的平凡实现
虚拟机没有泛型类型对象——所有对象都是普通类
n 基本概念:
1. 类型擦除:擦除类型变量T,并用第一个限定的类型变量来替换(若T无限定,就用Object替换)
2. 原始类型:一个泛型类经过类型擦除得到的类
n 翻译泛型表达式
n 翻译泛型方法
n 调用遗留代码
6. Java泛型的约束和局限性
1. 不能用基本类型实例化类型参数
2. 运行时类型查询只适用于原始类型
3. 不能创建参数化类型的数组
4. Varargs警告
5. 不能实例化类型变量
6. 泛型类的静态上下文中类型变量无效
7. 不能抛出或者捕获泛型类的实例
8. 注意擦除后的冲突