一、getGenericSuperclass()和getActualTypeArguments()基本用法:
import java.lang.reflect.ParameterizedType;
public

class TT extends TT2<Integer> {


public static void main(String[] args) {

System.out.println(((ParameterizedType) new TT().getClass()
.getGenericSuperclass()).getActualTypeArguments()[0]);

}

}
//output:class java.lang.Integer
说明: getGenericSuperclass() 通过反射获取当前类表示的实体(类,接口,基本类型或void)的直接父类的Type,getActualTypeArguments()返回参数数组。
 
这段代码是这个意思,看是不是支持泛型的,Type type = this.getClass().getGenericSuperclass(); 是得到这个类的得到泛型父类 ,if(!(type instanceof ParameterizedType)),这行代码的意思是
如果没有实现ParameterizedType接口,即不支持泛型;Type[] params = ((ParameterizedType) genType).getActualTypeArguments();这行代码的意思是,如果支持泛型,返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class,因为可能有多个,所以是数组。
后面的应该你很容易就看懂了。
超类就是父类了,
getActualTypeArguments()就是获取泛型参数的类型

比如Test<T>,最后就得到T类型

二、泛型
DAO

模拟

BaseDaoImpl类:
package com.mrlun.oa.test;
import java.lang.reflect.ParameterizedType;
@SuppressWarnings("unchecked")
public
class BaseDaoImpl<T> {
private
Class clazz;

public BaseDaoImpl() {
ParameterizedType pt = (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 extends BaseDaoImpl<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的时间

使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型的更多相关文章

  1. 泛型DAO与泛型Service

    泛型Dao与Service 看了几个帖子,泛型Dao与Service的主要目的就是要减少重复代码.具体的说明如下: 1. 定义一个BaseDao接口,此接口包含了一些通用的DAO操作,例如:增加.删除 ...

  2. 一个好用的hibernate泛型dao

    以前从springside2.0上搞下来的很好用的,基本实现dao零编码只要配置xml文件就行了. 先看图: 一共4层,com.demonstration.hibernate.basedao是我加的用 ...

  3. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  4. 父类通过泛型获得子类Class类型 以及Type体系

    1.背景介绍 在实现SSH框架中,DAO层向数据库持久化的过程中,因为大部分保存对象的方法都会调用到sava():所有索性就把save delete update select 方法进行封装到父类中, ...

  5. Java泛型之Type体系

    Type是java类型信息体系中的顶级接口,其中Class就是Type的一个直接实现类.此外,Type还有有四个直接子接口:ParameterizedType,TypeVariable,Wildcar ...

  6. ItcastOA_设计BaseDao_设计DAO接口和实现类_写DAO实现类中的方法内容

    3. 基础功能 3.1. 设计BaseDao接口与BaseDaoImpl类 每个实体都应有一个对应的Dao,他封装了对这个实体的数据库操作.例 实体Dao接口实现类 ================= ...

  7. [原创]java WEB学习笔记21:MVC案例完整实践(part 2)---DAO层设计

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. getSuperclass与getGenericSuperclass区别

    声明三个类class Person<T, V> {}class Teacher {}class Student extends Person<Student, Teacher> ...

  9. 关于Java泛型"擦除"的一点思考

    头次写博客,想说的东西不难,关于泛型的疑问,是前一阵在学习jackson中遇到的. 下面就把我所想到的.遇到的,分享出来. 泛型是JDK1.5后的一个特性,是一个参数类型的应用,可以将这个参数声明在类 ...

随机推荐

  1. java设计模式演示样例

    创建模式 1.工厂方法模式(Factory Method)  将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...

  2. Quartz contention when running in load balanced environment--reference

    1.8.3 appears to have addressed this issue with a single application server. However, we're seeing t ...

  3. Android系统移植与驱动开发----第一章

    第一章 Android系统移植与驱动开发 Android源代码定制完全属于自己的嵌入式系统,但是支持的设备不多,所以要移植,而在移植的过程中使用的不得不提的是驱动开发. Android系统构架主要包括 ...

  4. HighCharts基本用法

    var options={ chart: {type: 'column',renderTo: 'ChartDesigner1'},//type :图表类型(柱状图,饼状图),renderTo :指向页 ...

  5. INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 错误

    在eclipse编译好文件之后,往AVD中安装apk,报错如下:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED一般来说只需要检查AndroidManifest.xml中 ...

  6. java 类处理工具

    public class ClassUtils { private static final Logger LOGGER = LoggerFactory.getLogger(ClassUtils.cl ...

  7. IIS7、IIS6 web.config注册HttpModule

    IIS6注册HttpModule <system.web>     <httpModules>       <add name="..." type= ...

  8. Spring依赖注入的三种方式

    看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...

  9. 巧用C#做中间语言 实现Java调用.net DLL

    本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:“在Java项目中必须使用其提供的用.net写的DLL加密机制!” 环境与工具: ◆.net framework ...

  10. table-css