Java泛型那些事
泛型的目的
语法糖即糖衣语法,这种语法对语言并没有影响,只是方便了程序员的使用。主要包括:泛型,变长参数,条件编译,自动拆装箱,内部类等。虚拟机并不支持这种语法,在编译期就会被还原为基础语法结构,这个过程被称为解语法糖。
泛型的目的:通过泛型使得在编译期间完成类型转换工作,避免运行时强制类型转换而出现ClassCastException,类型转换异常
泛型初窥
JDK1.5之后添加
泛型的好处
- 类型安全,将类型检测挪到了编译期。
- 消除了代码中许多的强制类型转换,增强了代码的可读性
- 为较大的优化带来了可能
泛型使用
泛型的实质:允许在定义接口、类时声明类型形参,类型形参在整个接口、类体内可当做类型使用
方法声明定义的形参只能在该方法里使用
修饰符<T,S> 返回值类型 方法名(形参列表){
方法体
}类型通配符
- 任意通配符:?匹配任意的类型,用作读取不能添加
- 上限通配符:使用extends关键字指定这个类型必须是继承某个类,或者是实现某个接口(子类或者本身)
- 下限通配符:使用super关键字指定这个类型必须是某个类的父类,或者是某个接口的父类
类型擦除
作用于编译期间,所以运行期间泛型信息是被擦除的,编译后的Class不包含泛型信息。静态方法,静态初始化或者静态变量声明和初始化不允许使用类型形参。也不能使用instance of运算符