黑马程序员技术交流社区

标题: 昨日回顾之泛型 [打印本页]

作者: 王子鹏    时间: 2016-5-28 10:38
标题: 昨日回顾之泛型
泛型
例 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中的所有元素
迭代器的泛型百分之百和获取的集合的泛型一致;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2