泛型
- 编译时类型安全检测机制
- 该机制允许程序员在编译时检测到非法的类型
- 本质:参数类型–>所操作的数据类型被指定为一个参数泛型
- 不存在于JVM虚拟机
虚拟机在运行期进行检测,如果有异常,就会报异常CastNotException,而泛型将类型检测提前到了编译期
作用:
- 增强编译时错误检测,减少因类型问题引发的运行时异常
- 泛型具有更强的类型检测
- 避免类型转换
- 泛型算法,增加代码复用性
类、接口、方法
//类
public class Student<T>{
private T t;
}
//方法
public <T> void test(T t){
}
//接口
interface generics<T>{
}
//泛型类/接口的继承
class Generic2<T> implements generics<T>{
}
class Generics3 implements generics<String>{
//有具体类型前面就不用<T>
}
常用变量名
E:元素
K:键
N:数字
T:类型
V:值
S,U,V等:第二第三第四个类型
缺少实际类型变量的的泛型就是一个原始类型
class P<T>{}
P p = new P() // --->原始类型
限制机制,不限制的话都继承自Object不能用特定的方法
通配符“?”
受上下限控制的通配符
通配符匹配
适用范围:
- 参数类型
- 字段类型
- 局部变量类型
- 返回值类型(一般不用)
PESC原则:
Producer extends生产者,只能从集合中获取元素
<? extends T>
Consumer super 消费者原则,只能从集合中添加元素
<? super T>