首页 > 学院 > 开发设计 > 正文

泛型(笔记)

2019-11-08 19:31:02
字体:
来源:转载
供稿:网友
一、为什么要有泛型(Generic)?1. 解决元素存储的安全性问题2. 解决获取数据元素时,需要类型强转的问题3. 泛型,JDK1.5新加入的4. 常用T表示 , T只能是类,不能用基本数据类型填充。(使用泛形时,泛形类型须为引用类型,不能是基本数据类型)   泛型的实例化:           一定要在类名后面指定类型参数的值(类型)。如:           List<String> strList = new ArrayList<String>();           Iterator<Customer> iterator = customers.iterator();5. 静态方法中不能使用类的泛型。6. 如果泛型类是一个接口或抽象类,则不可创建泛型类的对象(这不是废话吗,接口类和抽象类都不能直接创建对象)7. 不能在catch中使用泛型8. 从泛型类派生子类,泛型类型需具体化(例如:在MVC 设计模式中,底层模板BaseAction,BaseService,BaseDao三个抽象泛型类模板,用于被继承)9. 泛型不存在继承关系。10.一个很有用的方法: void drawAll(List<? extends Shape> shapes){//..} 方法中的参数可以接收Shape 的子类11. 一个典型的错误:    static void fromArrayToCollection(Object[] a,Collection<?> c){         for(Object o : a){               c.add(o);//编译错误           }    }        正确:(这样就能遍历任何任何集合)    static void fromArrayToCollection(T[] a,Collection<T> c){         for(Object o : a){               c.add(o);//正确           }    }二、泛型-深入    注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译带有泛形的集合时,会去掉“类型”信息,使程序运行效率不受到影响,这个过程称之为“擦除”

          由于编译生成的字节码会去掉泛型的类型信息,所以只要能跳过编译器(没有语法错误),就可以往某个泛型集合中加入其他类型的数据。使用反射测试结果。

    以下是PPT笔记:

   


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表