天天看点

泛型(笔记)

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

泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)
泛型(笔记)