Java泛型之简单篇
来源:互联网 发布:夜间灯光数据下载 编辑:程序博客网 时间:2024/06/08 16:29
最近在做一个项目,前面已经陆陆续续写了一部分关于页面设计的感受,目前已进入实现阶段,我会将此过程中用到的一些技术点及我的理解呈现给大家。
一、泛型是什么
以前在学习设计模式的时候,里面就提到了泛型的概念,但是总是对其认识模模糊糊,这次在项目中用到后才对其有了一点认识。
泛型,通俗的讲,就是对强制类型转换的一个优化;换句话说,泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
二、泛型的简单应用
泛型其实就是在接口、类或方法的名称后面添加上一些指定格式的参数,泛型的类型参数有两种声明方式,下面我就来为大家简单介绍一下:
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){//先声明未知类型的BaseDaoBaseDao<?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,保证了参数类型的安全性,关于泛型的深入使用,我会后续再进行补充。
- Java泛型之简单篇
- Java的泛型之简单讲解
- java泛型之矩阵简单操作
- Java的泛型之简单讲解
- Java之简单的泛型
- Java编程思想之15.2简单泛型
- Java学习篇之---JNI简单实现
- JAVA之简单scanner
- Java的简单之道
- java之Spring简单使用
- JAVA之Lock简单认识
- Java之简单的聊天工具
- Java之OutOfMemoryError简单分析
- Java IO之简单输入输出
- Java开发之简单数据类型
- Java之DriverManager简单介绍
- java之断点续传简单实现
- Java之简单输入输出数据
- 初学者
- 你所浪费的今天,是昨天死去的人奢望的明天。你所厌恶的现在,是未来的你回不去的曾经
- UDP / TCP 区别
- 最近的工作计划和生活安排
- 关于菜鸟yali博客的说明
- Java泛型之简单篇
- 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)
- 百度实习面试总结
- 别把最美女教师只当成宣传工具
- 【重构】你有重构的勇气吗
- Lua游戏开发01——程序设计与设计背后的思考
- 软件工具的原则
- 项目描述:
- 黑马程序员-关于插入一条数据,马上得到该数据ID