泛型
例 Iterator<Map.Entry<Person,String>> it = tm.entrySet().iterator();
泛型: jdk 1.5 出现的安全机制 引用在集合里 集合不能指定什么类型 而泛型可以
泛型可以定义在方法上 当方法静态时 不能访问类上定义的泛型 如果静态方法使用泛型,定义在方法上 一旦使用了泛型 变量类型不确定 不能使用具体类型的方法
好处: 1将运行时期的ClassCastexception 转到了编译时期
2避免了强制转换的麻烦
3 使用泛型可以接受所有的类型 并且具有object类型的方法
间括号什么时候用 当操作的引用数据不确定的时候 就使用《》将哟啊操作的引用数据类型传入即可 其实《》就是一个用于接收具体引用数据类型的参数范围
在程序中只用要到带有《》的类或者接口 就要明确传入的具体引用数据类型
引用数据类型
运行时会将泛型去掉 生成的class文件中是不带泛型的 这个称为泛型的擦除;
擦除后有补偿器 进行补偿
泛型的补偿: 在运行时 通过获取元素的类型进行转换动作 不用使用者再强制转换
自定义一个泛型类 tool< qq>{
Private qq q;
Set() Get()
泛型方法:
泛型类:
泛型接口:
泛型的通配符: ? :未知类型
Public staic void show (collection<?> al){
iterator <t> it = al.iterator();
泛型的高级应用:
泛型的限定:
上限: <?Extends Object E> 能接受e 类型或者 e的子类类型
一般在添加元素的时候使用上限 因为这样取出的都是按照上限类型来运算的 不会出现类型转换安全隐患
下限: <?Extends Super E > 接受e类型或者e类型的父类型
通常对集合中的元素进行取出操作时 可以使用下限 可以使用最高权限接收
addAll(Collection<? Extends E > e) 将指定的collection中的所有元素都添加到此collection中
al3.ContainsAll(al2) al3中是否包含al2中的所有元素
迭代器的泛型百分之百和获取的集合的泛型一致; |
|