Java学习泛型程序设计
2020-05-24 20:07:46
1.泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用;泛型提供了一个更好的解决方法,类型参数,类型参数的魅力在于使程序具有更好的可读性和安全性
2.类定义中的类型变量指定方法的返回类型以及域和局部变量的类型
3.在Java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值得类型,T(需要时还可以用临近得U和S)表示“任意类型”
4.泛型类可看作普通类得工厂
5.在普通类和泛型类中可以定义带有类型参数的方法,类型变量放在修饰符得后面,返回值的前面
6.当调用一个泛型方法时,在方法名前的尖括号中放入具体的类型,在这种情况下,方法调用可以省略类型参数
7.有时类或方法需要对类型变量加以约束
对类型变量进行限定<T extends Compareble>表示T应该是绑定类型的子类型,T和绑定类型可以是类,也可以是接口,选择关键词extends的原因是更接近子类的概念,一个类型变量或通配符可以有多个限定,限定类型用&分隔,而用逗号来分隔类型变量
8.在Java继承中,可以根据需要拥有多个接口超类型,但是限定中至多一个类,如果用一个类作为限定,它必须是限定列表中的第一个
9.虚拟机没有泛型类型对象---所有的对象都属于普通类
10.类型擦除,无论何时定义一个泛型类型,都自动提供一个相应的原始类型,原始类型的名字就是删去类型参数后的泛型类型名,擦除类型变量,并替换为限定类型(无限定的变量用Object)
11.原始类型用第一个限定的类型变量来替换,如果没有给定限定就用Object替换
12.当程序调用泛型方法时,如果擦除返回类型,编译器会插入强制类型转换;当存取一个泛型域时也要插入强制类型转换
13.类型擦除与多态会发生冲突,解决这个问题,编译器会在子类中生成一个桥方法
14.有关Java泛型转换的事实
虚拟机没有泛型,只有普通的类和方法
所有的类型参数都用他们的限定类类型替换
桥方法被合成来保持多态
为保持类型安全性,必要时插入强制类型转换
15.不能用基本类型实例化类型参数
16.运行时类型查询只适用于原始类型
17.不能够创建参数化类型的数组
18.不能实例化类型变量
19.不能构造泛型数组
20.泛型类的静态上下文中类型变量无效,不能在静态域会方法中引用静态变量
21.不能抛出或捕获泛型类的实例,实际上,泛型类扩展Throwanble都是不合法的
22.可以消除对受查异常的检查
23.注意擦除后的冲突
24.泛型规范说明还提到另外一个原则,要想支持擦除的转换,就需要强行限制一个类或类型变量不能同时成为两个接口类型的子类,而这两个接口是同一个接口的不同参数化
25.通常不同泛型类型的类没有什么联系,即使泛型类型有继承关系
26.永远可以将参数化类型转换为一个原始类型
27.泛型类可以扩展或实现其它的泛型类
28.通配符类型允许参数变化
29.通配符的超类型限定,将通配符限制为super关键字后面类型的所有超类型
30.直观的讲,带有超类型限定的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取
31.无限定通配符,无限定通配符的类与原始的类本质不同在于,可以使用任意的Object对象调用原始的类中的更改器方法,无限定通配符的类中的更改器方法不能够被调用
32.通配符不是类型变量,因此不能在代码中使用通配符作为一种类型