Java泛型

一  为什么要用泛型

            泛型主要有两个好处:

                   编译时类型安全;

                    代码复用

二 泛型使用

        泛型参数,泛型接口:被实现或继承后可以继续使用泛型 或给出类型

        泛型方法:方法语句中声明 才是泛型方法

    Ps  传值泛型对象时,泛型对象的指定类的子类也可以使用

泛型限定符:extends  

指定泛型 必须继承或实现该类或接口,

可以有多个限定 &连接  只能有一个类,且放在第一位(单继承  多实现)

三 泛型的约束和局限性

无法实例化类型变量  无法使用 T t = new T();

静态域无法引用泛型变量(泛型方法可以使静态)原因  java 静态对象加载顺序

不允许使用 instanceof  关键字

泛型类数组可以定义,无法创建

extends  限制符 可以继承 Exception Throwable  但无法被捕获,但可以被抛出

无法捕获
可以抛出

四  继承规则

    泛型类型  不影响泛型类的 类型,

    泛型类型继承关系,无法影响泛型类的继承关系

通配符:

    extends  上界通配符,这个类或接口的本身或子类,限定传入参数类型的上界,用于安全的读取数据;原理:上界类型是确认的,可传子类  获取数据时  可强转为父类;

super  下界通配符,这个类或接口的父类或父类的父类,限定传入参数类型的下界,用于安全的写入数据;原理:下界类型确定 只能传父类,可以安全的转型


五 虚拟机实现泛型的原理


类型擦除:

    在进入JVM之前,会把泛型去掉,JVM中的泛型类 只是自身Class,泛型类会被替换为固定Class;

无限制泛型-------> Object

有限制泛型-------> 上界或下界

Ps :利用发射获取方法时,要注意泛型方法的类型被擦除成什么了

你可能感兴趣的:(Java泛型)