泛型(笔记)

一、为什么要有泛型(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笔记:


   


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