黑马Java学习笔记之-----泛型

---------------------- android培训java培训期待与您交流! ----------------------

 

  什么是泛型?

    通俗的说,就是泛泛的指定对象所操作的类型,而不像常规方式一样使用某种固定的类型去指定。泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。这种参数类型可以使用在类、接口以及方法定义中。

1.为什么要使用泛型?

  因为集合存放的数据类型不固定,故往集合里面存放元素时,存在安全隐患,

  如果在定义集合时,可以想定义数组一样指定数据类型,那么就可以解决该类安全问题。

  JDK1.5后出现了泛型,用于解决集合框架的安全问题。

  泛型是一个类型安全机制。

2.泛型定义格式?

  通过<>来定义要操作的引用数据类型

  如:ArrayList<String> al = new ArrayList<String>;

3.泛型的好处?

  **将运行时期出现的ClassCastException(类型转换异常)问题转移到编译时期;

  **避免了强制转换的麻烦。

4.什么使用泛型呢?

  泛型在集合框架中很常见,只要见到<>就要定义泛型。其实<>就是用来接收类型的。

 

  当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

5.泛型的形式:

  **泛型类:即自定义泛型类

 

    A:当类中要操作的引用数据类型不确定时,早起定义Object来完成扩展,现在定义泛型来完成

 

    B:局限性:泛型类定义的泛型,在整个类中有效,如果该泛型类的方法被调用,

 

        当泛型类的对象明确要操作的类型后,所有要操作的类型就被固定。

 

  **泛型方法:泛型放在返回值前面,修饰符的后面

 

    A:为了避免泛型类的局限性,让不同方法可以操作不同的类型,而且类型还不确定,

 

        则可以将泛型定义在方法上

 

    B:特殊之处:静态方法不可以反问类上定义的泛型

 

      如果静态方法操作的应用数据类型不确定,可以讲泛型定义在静态方法上

 

  **泛型接口:

 

    当泛型定义在接口上时,则子类中要指定实现接口类型,同时还可以子类也可以定义为泛型类

6.泛型的高级应用:?通配符

  **当指定两种泛型的集合,则迭代时也要定义两种泛型的迭代器,麻烦,此时可通过将迭代器的泛型

     改为?,如Iterator<?> it=al.iterator();

  **两种泛型限定

    向上限定: ? extends E  ;E可以接收E类型或者E的子类

    向下限定: ? super E  ;E可以接收E类型或者E的父类

 7.泛型的规则和限制:

  (1) 泛型的参数类型只能是类(class)类型,而不能是简单类型。

        比如,<int>是不可使用的。

  (2) 可以声明多个泛型参数类型,比如<T, P,Q…>,同时还可以嵌套泛型,例如:<List<String>>

  (3) 泛型的参数类型可以使用extends语句,例如<T extends superclass>。

  (4) 泛型的参数类型可以使用super语句,例如< T super childclass>。

  (5) 泛型还可以使用通配符,例如<? extends ArrayList>

 

 


 

 

---------------------- android培训java培训期待与您交流! ----------------------

posted @ 2013-04-29 02:13  Mercy_K  阅读(216)  评论(0编辑  收藏  举报