使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
2015-12-29 09:49
477 查看
一、getGenericSuperclass()和getActualTypeArguments()基本使用方法:
import java.lang.reflect.ParameterizedType;
public class TT extendsTT2<Integer> {
public static void main(String[] args) {
System.out.println(((ParameterizedType) newTT().getClass()
.getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
//output:classjava.lang.Integer
说明: getGenericSuperclass() 通过反射获取当前类表示的实体(类,接口,基本类型或void)的直接父类的Type。getActualTypeArguments()返回參数数组。
二、泛型
DAO 模拟
BaseDaoImpl类:
packagecom.mrlun.oa.test;
importjava.lang.reflect.ParameterizedType;
@SuppressWarnings("unchecked")
public classBaseDaoImpl<T> {
private Classclazz;
publicBaseDaoImpl() {
ParameterizedTypept = (ParameterizedType) this.getClass()
.getGenericSuperclass();
this.clazz =(Class) pt.getActualTypeArguments()[0];
System.out.println("Type为: " + clazz.getSimpleName());
}
public void save() {
System.out.println("Type为: " + clazz.getSimpleName());
}
}
UserDao类:
package com.mrlun.oa.test;
public class UserDao extendsBaseDaoImpl<Users>{
}
測试类:
package com.mrlun.oa.test;
public class Test{
public static void main(String[] args) {
UserDao userdao=new UserDao();
userdao.save();
}
}
//output:
Type为: Users(new子类时会调用父类的默认的构造方法)
Type为: Users
这时,我们就能够使用泛型来简化DAO的操作,省去了写N多有反复的方法的DAO的时间。
import java.lang.reflect.ParameterizedType;
public class TT extendsTT2<Integer> {
public static void main(String[] args) {
System.out.println(((ParameterizedType) newTT().getClass()
.getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
//output:classjava.lang.Integer
说明: getGenericSuperclass() 通过反射获取当前类表示的实体(类,接口,基本类型或void)的直接父类的Type。getActualTypeArguments()返回參数数组。
二、泛型
DAO 模拟
BaseDaoImpl类:
packagecom.mrlun.oa.test;
importjava.lang.reflect.ParameterizedType;
@SuppressWarnings("unchecked")
public classBaseDaoImpl<T> {
private Classclazz;
publicBaseDaoImpl() {
ParameterizedTypept = (ParameterizedType) this.getClass()
.getGenericSuperclass();
this.clazz =(Class) pt.getActualTypeArguments()[0];
System.out.println("Type为: " + clazz.getSimpleName());
}
public void save() {
System.out.println("Type为: " + clazz.getSimpleName());
}
}
UserDao类:
package com.mrlun.oa.test;
public class UserDao extendsBaseDaoImpl<Users>{
}
測试类:
package com.mrlun.oa.test;
public class Test{
public static void main(String[] args) {
UserDao userdao=new UserDao();
userdao.save();
}
}
//output:
Type为: Users(new子类时会调用父类的默认的构造方法)
Type为: Users
这时,我们就能够使用泛型来简化DAO的操作,省去了写N多有反复的方法的DAO的时间。
相关文章推荐
- 对Android开发有用的技术栈(一)架构篇
- jblas、ujmp、jmatio的相互转化
- Android编程开发之TextView控件用法(2种方法)
- IT运维分析与海量日志搜索需要注意什么
- 在Linux和Window下如何查看一个端口是否监听以及被哪个进程监听命令
- Windows通用应用开发手记-Behavior SDK概述
- SAS学习笔记8
- ROS学习笔记(五)::RVIZ:Markers::Points and Lines (C++)
- Java基础学习总结(14)——Java对象的序列化和反序列化
- 学习JAVE_eclipse的开始
- sendmail
- PostgreSQL 查询表中重复数据
- JAVA集合框架之Map接口实现类
- 从性能方面考虑PHP下载远程文件的3种方法
- 地图坐标转换->火星坐标
- easyui datagrid checkbox初始化某几行disabled时,点击全选还是可以选择 解决办法
- Mac 10.11 React Native 安装记录
- 应用web框架模块设计三国演义篇
- MyBatis查询嵌套对象
- 在CentOS 7最小化服务器版本中如何启用并使用“ifconfig”命令?