< meta http-equiv="description" content="通过上面的例子我们简单了解了泛型的基本用法,泛型类和方法的定义及其使用,而泛型主要是把参数类型转换的工作交给了java,保证了参数类型的安全性,关于泛型的深入使用,我会后续再进行补充"/>

Java泛型之简单篇

[来源] 达内    [编辑] 达内   [时间]2012-11-09

通过上面的例子我们简单了解了泛型的基本用法,泛型类和方法的定义及其使用,而泛型主要是把参数类型转换的工作交给了java,保证了参数类型的安全性,关于泛型的深入使用,我会后续再进行补充

  最近在做一个项目,前面已经陆陆续续写了一部分关于页面设计的感受,目前已进入实现阶段,我会将此过程中用到的一些技术点及我的理解呈现给大家。

  一、泛型是什么

  以前在学习设计模式的时候,里面就提到了泛型的概念,但是总是对其认识模模糊糊,这次在项目中用到后才对其有了一点认识。

  泛型,通俗的讲,就是对强制类型转换的一个优化;换句话说,泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

  二、泛型的简单应用

  泛型其实就是在接口、类或方法的名称后面添加上一些指定格式的参数,泛型的类型参数有两种声明方式,下面我就来为大家简单介绍一下:

  1.继承父类:

  这种叫做继承方式,顾名思义,只要你之后调用该泛型的类或方法时,只要它的参数类型继承自superclass,java就可以自动帮你转换。

  下面我们举个例子,先来看泛型类的声明。

  1. /**

  2.

  3. * 泛型类的定义

  4.

  5. * @author 赵丹丹

  6.

  7. * @param 实体类

  8.

  9. * @param 主键类型

  10.

  11. */

  12.

  13. publicclass BaseDao {

  14.

  15. /**

  16.

  17. * 泛型方法的定义

  18.

  19. * @param id 主键

  20.

  21. */

  22.

  23. voiddeleteByKey(PK id);

  24.

  25. }

  这里的PK是可以自己任意起的名字,但是后面的Serializable是一个类,你的PK要继承的类,它可以是java自带的类,也可以是你的自定义类。

  下面我们来看看如何使用它们:

  1. public void deleteByKey(Long id){

  2.

  3. BaseDaobaseDao = new BaseDao();

  4.

  5. baseDao.deleteByKey(id);

  6.

  7. }

  这里在声明类对象的时候就对类型参数进行了指定,因此后面的操作无需我们进行强制的类型转换,java会自动帮我们转换。

  2.通配符:

  泛型的类型参数声明还有一种方式:通配符?,它是对上面继承方式的一种扩充,它本身也属于继承方式,但是不同的在于上面的T在类对象声明时是确定的,而?可以将这个具体的参数类型推迟,这种方式有什么用呢?

  比如我们需要根据主键的不同类型选择不同的baseDao的具体类型对象,所以这里的baseDao需要具有通用性,我们这里使用?进行声明,请看下面的对BaseDao的调用改进:

  1. public BaseDaoBaseType(Long type){

  2.

  3. //先声明未知类型的BaseDao

  4.

  5. BaseDao baseDao = null;

  6.

  7. BaseDaobaseDao1 = new BaseDao();

  8.

  9. BaseDaobaseDao2 = new BaseDao();

  10.

  11. //根据不同的条件给baseDao赋值

  12.

  13. if(type== 1){

  14.

  15. ……//一系列的处理

  16.

  17. baseDao= baseDao1;

  18.

  19. }elseif(type == 2){

  20.

  21. ……//一系列的处理

  22.

  23. baseDao= baseDao2;

  24.

  25. }

  26.

  27. returnbaseDao;

  28.

  29. }

  30.

  31.

  32.

  33. publicvoid deleteByKey(Long id){

  34.

  35. //注意要对返回值进行一下转换这里

  36.

  37. BaseDaobaseDao = (BaseDao)this.BaseType(1L);

  38.

  39. baseDao.deleteByKey(id);

  40.

  41. }

  通过上面的例子我们简单了解了泛型的基本用法,泛型类和方法的定义及其使用,而泛型主要是把参数类型转换的工作交给了java,保证了参数类型的安全性,关于泛型的深入使用,我会后续再进行补充。达内 http://www.tarena.com.cn

资源下载