【重学Java】(一)Java泛型

1.什么是泛型

JDK5引入泛型,提供了编译时 类型安全 检测机制。该机制允许程序员在编译期检测非法的类型。

本质是参数类型,所操作的数据类型被认定为参数。

只存在于编辑器和编译期,jvm中没有泛型,目的是为了兼容低版本

2.为什么使用泛型

(1)增强编译期错误检测,减少因类型问题引发的运行时异常

(2)具有更强的类型检查,不需要强转

(3)可以使用泛型算法,增加代码复用性

3.Java中的泛型

泛型类、泛型接口、泛型方法

4.常见类型变量名称

E:元素(在Java集合框架中有广泛的应用)

K:键

N:数字

T:类型 V:值

S,U,V 等:第二,第三,第四个类型

5.受限的类型参数

单一限制:<U extends Number>

多种限制:<U extends A & B & C>

extends表达的意义:这里指的是广义上“扩展”,兼有“类继承”和“接口实现”之意 多种限制下的格式

语法要求:如果上限类型是一个类,必须第一位标出,否则编译错误

泛型算法实现的关键:利用受限类型参数

类型推断:根据多个受限参数的交集来推断,取范围最小的,没有交集则用object

6.通配符

泛型中的?为通配符,分为上限通配符?extends Number:只能读不能写

和下限通配符 ? super Integer:只能写不能读

即PECS producer extends consumer super,可以类比生产者和消费者,一个只生产,一个只消费

如果只是?就是不受限通配符,这时,不能调用任何和T相关的方法

通过通配符可以在泛型类和接口直接建立联系,提升了API的灵活性

7.泛型的约束和局限性(类型擦除)

(1)继承泛型类型多态的问题,子类没有覆盖父类的方法(jvm中用桥方法实现)

(2)泛型类型中的方法冲突(如定义 equles(T t)与object类冲突)

(3)没有泛型数组

泛型代码与JVM

(1)虚拟机中没有泛型,只有普通类和代码

(2)编译阶段,所有泛型类的类型参数,都会被object或者限定边界来代替

(3)继承泛型类型时,桥方法是为了避免类型擦除导致的多态问题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章