对Java泛型的简单理解
2019独角兽企业重金招聘Python工程师标准>>>
泛型的定义主要有以下两种:
在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)
在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板)
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型只不过是java中的类型而已,继承自Type接口。
泛型的意义在于:在抽象的时候泛化,在具体的时候细化,在编译的时候就可以决定泛化的值。通俗得讲,可以将泛型看做是类或者接口带了一个参数,这个参数可以在属性、方法的参数、方法的返回值中使用使用。
ParameterizedType有如下几个方法:
Type[] |
getActualTypeArguments() 返回表示此类型实际类型参数的 Type 对象的数组。 |
Type |
getOwnerType() 返回 Type 对象,表示此类型是其成员之一的类型。 |
Type |
getRawType() 返回 Type 对象,表示声明此类型的类或接口。 |
actualTypeArguments指类的参数
rawType指带了参数的类或者接口
了解这些之后,就可以对使用了Hibernate的Dao进行一次CRUD的重构。
import
java.lang.reflect.ParameterizedType;
import
java.util.Collection;
import
javax.annotation.Resource;
import
org.hibernate.Query;
import
org.hibernate.SessionFactory;
/**
* 超类dao实现,专门用于继承
*/
@SuppressWarnings
(
"unchecked"
)
public
abstract
class
BaseDaoImpl<T>
implements
BaseDao<T> {
//注入会话工厂
@Resource
(name=
"sessionFactory"
)
private
SessionFactory sf ;
private
Class<T> clazz ;
/**
* 1、this代表该类的子类
* 2、this.getClass().getGenericSuperclass()代表该类
* 3、type.getActualTypeArguments()[0]就是T
* 4、type.getRawType()就是BaseDaoImpl
*/
public
BaseDaoImpl(){
ParameterizedType type = (ParameterizedType)
this
.getClass().getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[
0
];
}
public
void
saveEntity(T t) {
sf.getCurrentSession().save(t);
}
public
void
updateEntity(T t) {
sf.getCurrentSession().update(t);
}
public
void
saveOrUpdateEntity(T t) {
sf.getCurrentSession().saveOrUpdate(t);
}
public
void
deleteEntity(T t) {
sf.getCurrentSession().delete(t);
}
//批量更新
public
void
batchEntityByHQL(String hql, Object... objects) {
Query q = sf.getCurrentSession().createQuery(hql);
for
(
int
i =
0
; i < objects.length ; i ++){
q.setParameter(i, objects[i]);
}
q.executeUpdate();
}
public
T getEntity(Integer id) {
return
(T) sf.getCurrentSession().get(clazz, id);
}
public
T loadEntity(Integer id) {
return
(T) sf.getCurrentSession().load(clazz, id);
}
public
Collection<T> findEntityByHQL(String hql, Object... objects) {
Query q = sf.getCurrentSession().createQuery(hql);
for
(
int
i =
0
; i < objects.length ; i ++){
q.setParameter(i, objects[i]);
}
return
q.list();
}
}
转载于:https://my.oschina.net/tinglanrmb32/blog/370444
对Java泛型的简单理解相关推荐
- Java泛型的个人理解
2019独角兽企业重金招聘Python工程师标准>>> java泛型的意义 首选,我们说一下,为什么要用泛型,泛型来解决什么问题. 泛型解决, 某一个集合类内部添加多个类的某一种类的 ...
- JAVA反序列化漏洞简单理解
反序列化原理 关于反序列化的原理不在多说,和php类似,序列化的数据是方便存储的,而存储的状态信息想要再次调用就需要反序列化 Java反序列化的API实现 实现方法 Java.io.ObjectOut ...
- Java包的简单理解
包的理解 那java项目中也是可以分不同文件夹的.只不过java中类的文件夹不叫文件夹,叫"包名" 英文单词:package,那package还有个意思就是打包的意思,所以你可以理 ...
- Java虚拟机JVM简单理解
Java虚拟机JVM的作用: Java源文件(.java)通过编译器编译成.class文件,.class文件通过JVM中的解释器解释成特定机器上的机器代码,从而实现Java语言的跨平台. JVM的体系 ...
- 【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
文章目录 一.泛型简介 二.泛型类 三.泛型方法 四.静态方法的泛型 五.泛型类与泛型方法完整示例 一.泛型简介 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; j ...
- java泛型程序设计——定义简单泛型类+泛型方法
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 定义泛型类+泛型方法的知识: [1]一个泛型类: 就是具有一个或多个 ...
- java泛型特点_java泛型简单总结
Java泛型简单总结 1)基本概念: 泛型(Generic Type或Generics)是 对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看做是使用参数化类型时 ...
- 深入理解Java泛型
作为一个 Java 程序员,日常编程早就离不开泛型.泛型自从 JDK1.5 引进之后,真的非常提高生产力.一个简单的泛型 T,寥寥几行代码, 就可以让我们在使用过程中动态替换成任何想要的类型,再也不用 ...
- java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...
1.泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的 创建中,分别称为泛型类.泛型接口.泛型方法. ...
最新文章
- 微信小程序多项选择器_微信小程序三级联动之多列选择器
- git新建项目并push进去
- 百万数据报表导出:需求以及思路分析
- Magento调用静态块 static block
- CCF认证-2014-12-2 Z字形扫描
- linux 多路径配置
- 图书管理系统软件测试报告_软件测试新手入门小知识点,一定要牢记
- 微信小程序:收款码三合一制作微信小程序源码下载多模板选择
- 中继器系列:中继器增删改查
- 个人公众号,用于开发经验分享
- 刷 LeetCode 吃力正常吗?
- php期末大作业可以做什么,期末要交一个基于php连入数据的大作业
- 脉冲星 6 月脉动 | Pulsar Summit 北美峰会圆满结束,ApacheCon 议程官宣
- RAID 1 的优点缺点和应用场景
- 下了个蓝屏代码查看工具,就中病毒了。。。什么鬼病毒,竟然还是用的VBS
- mysql复制多行_mysql中的复制方式总结(半同步复制,并行复制,多源复制)
- 下载 电子商城类型htm模板_淘抢购蓝紫色活动背景促销关联价格曲线_psd素材免费下载_ 790*2468像素(编号:24640080)...
- 阿里云 SUSE linux 安装谷歌浏览器Chrome 安装goole浏览器报错
- html不鼓励使用的标签,鼓励和提醒孩子使用敬语.html
- mysql 三种注释_mysql的注释有几种写法?