Java泛型扫盲

      在 Java SE1.5 中,增加了一个新的特性:泛型(日本语中的总称型)。何谓泛型呢?通俗的说,就是泛泛的指定对象所操作的类型,而不像常规方式一样使用某种固定的类型去指定。泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。这种参数类型可以使用在类、接口以及方法定义中。

 

为什么使用泛型呢?

      在以往的 J2SE 中,没有泛型的情况下,通常是使用 Object 类型来进行多种类型数据的操作。这个时候操作最多的就是针对该 Object 进行数据的强制转换,而这种转换是基于开发者对该数据类型明确的情况下进行的(比如将 Object 型转换为 String 型)。倘若类型不一致,编译器在编译过程中不会报错,但在运行时会出错。

      使用泛型的好处在于,它在编译的时候进行类型安全检查,并且在运行时所有的转换都是强制的,隐式的,大大提高了代码的重用率。

 

1、 <T> 是泛型的标记,当然可以使用别的名字,比如 。使用 <T> 声明一个泛型的引用,从而可以在 class 、方法及接口中使用它进行数据定义,参数传递。
2、 <T> 在声明的时候相当于一个有意义的数据类型,编译过程中不会发生错误;在实例化时,将其用一个具体的数据类型进行替代,从而就可以满足不用需求。

 

泛型的规则和限制

通过上述的例子,我们简单理解了泛型的含义。在使用泛型时,请注意其使用规则和限制,如下:

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

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

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

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

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

5、 泛型还可以使用通配符,例如 <? e xtends ArrayList>

 

扩展

1、 extends 语句

使用 extends 语句将限制泛型参数的适用范围。例如:

<T extends collection> ,则表示该泛型参数的使用范围是所有实现了 collection 接口的 class 。如果传入一个 <String> 则程序编译出错。

2、 super 语句

super 语句的作用与 extends 一样,都是限制泛型参数的适用范围。区别在于, super 是限制泛型参数只能是指定该 class 的上层父类

例如 <T super List> ,表示该泛型参数只能是 List 和 List 的上层父类。

3、 通配符

使用通配符的目的是为了解决泛型 参数 被限制死了不能 动态根据实例来确定的缺点 。

举个例子: public class SampleClass < T extends S> {…}

假如 A , B , C , …Z 这 26 个 class 都实现了 S 接口。我们使用时需要使用到这 26 个 class 类型的泛型参数。那实例化的时候怎么办呢?依次写下

SampleClass<A> a = new SampleClass();

SampleClass<B> a = new SampleClass();

SampleClass<Z> a = new SampleClass();

这显然很冗余,还不如使用 Object 而不使用泛型,呵呵,是吧?

别着急,咱们使用通配符,就 OK 了。

SampleClass<? Extends S> sc = new SampleClass();  

只需要声明一个 sc 变量,很方便把!
 
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2009/1007/16198_2.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值