Java泛型之简单篇

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

 

一、泛型是什么

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

 

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

 

二、泛型的简单应用

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

   

   1.继承父类:<T extends superclass>

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

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

/**

 * 泛型类的定义

 * @author 赵丹丹

 * @param <T> 实体类

 * @param <PK> 主键类型

 */

publicclass  BaseDao<PK extends Serializable> {

/**

 * 泛型方法的定义

 * @param id 主键

 */

voiddeleteByKey(PK id);

}


 

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

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

public void deleteByKey(Long id){

BaseDao<Long>baseDao = new BaseDao<Long>();

baseDao.deleteByKey(id);

}


 

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

 

    2.通配符:<?>

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

 

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

public BaseDao<?>BaseType(Long type){

//先声明未知类型的BaseDao

BaseDao<?extends Serializable> baseDao = null;

BaseDao<Long>baseDao1 = new BaseDao<Long>();

BaseDao<String>baseDao2 = new BaseDao<String>();

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

if(type== 1){

……//一系列的处理

baseDao= baseDao1;

}elseif(type == 2){

……//一系列的处理

baseDao= baseDao2;

}                

returnbaseDao;

}

 

publicvoid deleteByKey(Long id){

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

BaseDao<Long>baseDao = (BaseDao<Long>)this.BaseType(1L);

baseDao.deleteByKey(id);                

}


 

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

 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值