Java泛型之简单篇
[来源] 达内 [编辑] 达内 [时间]2012-11-09
最近在做一个项目,前面已经陆陆续续写了一部分关于页面设计的感受,目前已进入实现阶段,我会将此过程中用到的一些技术点及我的理解呈现给大家。
一、泛型是什么
以前在学习设计模式的时候,里面就提到了泛型的概念,但是总是对其认识模模糊糊,这次在项目中用到后才对其有了一点认识。
泛型,通俗的讲,就是对强制类型转换的一个优化;换句话说,泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
二、泛型的简单应用
泛型其实就是在接口、类或方法的名称后面添加上一些指定格式的参数,泛型的类型参数有两种声明方式,下面我就来为大家简单介绍一下:
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. 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. BaseDao
8.
9. 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. BaseDao
38.
39. baseDao.deleteByKey(id);
40.
41. }
通过上面的例子我们简单了解了泛型的基本用法,泛型类和方法的定义及其使用,而泛型主要是把参数类型转换的工作交给了java,保证了参数类型的安全性,关于泛型的深入使用,我会后续再进行补充。达内