`

java 泛型(gemeric)---1

    博客分类:
  • j2se
阅读更多

   Java 1.5(Tiger)发行版本增加了泛型(generic)。在没有增加generic之前,从集合中读取到的每一个对象都必须进行类型转换。如果有人不小心向集合里插入了类型错误的对象,那么在编译期不会出现任何错误提示,在运行期就会出现ClassCastException。有了generic后,可以告诉编译器每个集合接受哪些对象类型,编译器会自动地为你的插入进行转化,并在编译是告知你是否插入了类型错误的对象,同时从集合从读到的对象也不用进行类型转换了。

 

   1.什么是泛型?

声明中具有一个或者多个类型参数(type parameter)的类或者接口,就是泛型类或接口。
泛型类和接口统称泛型(generic type)。格式如下:

   

//构成格式为:类或接口的名称<形式类型参数或实际类型参数>
List<E> //读作”E的列表“
List<String>  //读作”字符串列表“

 

   2.泛型的各种形式

Set<Object> <!-- 参数化类型,表示可以包含任何对象类型的集合。-->
Set<?>         <!-- 表示一个无界的通配符类型,表示只能包含某种未知对象类型的集合。-->
Set<? extends T> <!-- 表示一个有界的通配符类型,表示只能包含T或T的子类对象类型的集合。-->
Set<? super T>    <!-- 表示一个有界的通配符类型,表示只能包含T或T的父类对象类型的集合。-->
Set                      <!-- 表示一个原生态类型。-->

 

 

   3.补充

  

在java5以后的代码中不建议使用原生态类型。原生态类型只是为了与引入泛型之前的遗留代码进行兼容
和互用而提供的(原理是泛型的类型擦除[Type erasure])。原生态类型失去了泛型在安全性和表述性方面所有优势。

 

 

   4.注意

  

泛型不支持子类型。但是任何泛型类都是其对应的原生态类型的一个子类型。

   

List<Long> list = new ArrayList<Long>();
list.add(Long.valueOf(1));
list.add(Long.valueOf(2));
List<Number> numbers = list; // this will not compile
numbers.add(Double.valueOf(3.14));
List rawList = list; //compiled

 

 

 参考文当:http://www8.cs.umu.se/kurser/tdbb24/HT05/jem/download/generics-tutorial.pdf

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics