Java核心技术——泛型编程

时间:2023-02-16 12:20:45
一、泛型编程
1.泛型类是具有一个或多个类型变量的类,通过定义类型变量<T>的方式来指明是泛型类,类型变量使用大写形式,且比较短,一般用T、U、S表示
2.可以定义带有类型参数的方法,泛型方法可以定义在普通类中,也可以定义在泛型类中
3.调用泛型方法时,在方法名前的尖括号中放入具体类型,也可以不写,由编译器自行推断
4.类型变量T最多只能继承一个类,可以继承多个接口
5.如果T类型要调用compareTo方法,则必须将T限制为实现了Comparable接口,即<T extends Comparable>
6.无论何时定义一个泛型类型,都自动提供一个相应的原始类型,原始类型用第一个限定的类型来替换,如果没有给定限定就用Object替换
7.虚拟机中没有泛型,只有普通的类和方法
8.Class类就是一个泛型类
9.泛型类不会因为类型参数之间有继承关系而产生继承关系


二、约束与局限性
1.不能用基本类型实例化类型参数
2.Pair<T>的类型是Pair,和T和具体什么类没有关系
3.不能抛出也不能捕获泛型类实例,即泛型类不能继承和扩展Throwable类
4.不能使用参数化类型的数组,如 Pair<String>[]
5.不能实例化类型变量,如 new T(...)、T.class
6.不能在静态域或方法中引用类型变量


三、通配符类型
1.Pair<? extends Employee>表示任何泛型Pair类型,它的类型参数是Employee的子类,如Pair<Manager>
2.超类型限定 ? super Manager 限制为Manager的所有超类型,但不能用作返回值
3.直观地讲,带有超类型限定的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取
4.通配符不是类型变量,不能使用“?”作为一种类型