Java泛型那些事

泛型的目的

语法糖即糖衣语法,这种语法对语言并没有影响,只是方便了程序员的使用。主要包括:泛型,变长参数,条件编译,自动拆装箱,内部类等。虚拟机并不支持这种语法,在编译期就会被还原为基础语法结构,这个过程被称为解语法糖。
泛型的目的:通过泛型使得在编译期间完成类型转换工作,避免运行时强制类型转换而出现ClassCastException,类型转换异常

泛型初窥

JDK1.5之后添加
泛型的好处

  1. 类型安全,将类型检测挪到了编译期。
  2. 消除了代码中许多的强制类型转换,增强了代码的可读性
  3. 为较大的优化带来了可能

    泛型使用

    泛型的实质:允许在定义接口、类时声明类型形参,类型形参在整个接口、类体内可当做类型使用
    方法声明定义的形参只能在该方法里使用
    修饰符<T,S> 返回值类型 方法名(形参列表){
    方法体
    }

    类型通配符

  4. 任意通配符:?匹配任意的类型,用作读取不能添加
  5. 上限通配符:使用extends关键字指定这个类型必须是继承某个类,或者是实现某个接口(子类或者本身)
  6. 下限通配符:使用super关键字指定这个类型必须是某个类的父类,或者是某个接口的父类

类型擦除

作用于编译期间,所以运行期间泛型信息是被擦除的,编译后的Class不包含泛型信息。静态方法,静态初始化或者静态变量声明和初始化不允许使用类型形参。也不能使用instance of运算符