`

使用泛型DAO引来的一系列之泛型,Class类

    博客分类:
  • J2EE
阅读更多
在开发网站过程中就使用了泛型带来的好处..消除了DAO的重复.
原文:http://www.hibernate.org/328.html.

当然也没有多想就照着做了.减少了代码的重复何乐而不为呢.

知道里面的经典语句:
 this.clazz = ((Parameterized)getClass().getGenericSuperclass()).getActualTypeArguments()[0];

这是得到那个参数化类型的.

也有过与别人一样的疑问,为什么不直接用getGenericIntergaces()来得到呢?
后来补了下泛型
Java中的泛型使用了擦除实现.
在泛型代码内部,无法获得任何有关泛型参数类型的信息
也就是说
List list = new ArrayList();
与
List<Integer> list = new ArrayList<Integer>();

在运行时是等价的.

参数类型不像基本类型那样有多态:
也就是说
List<Object> obj = new ArrayList<Integer>();

这样子是不对的.
在Thinking in java中也解答了这个问题:
在数组中为什么可以这样,而在泛型不能这样.
是由于在数组中有个ArraySortException运行异常.
而在泛型中没有这样类似的异常,只能在编译时就检查这种错误.
为什么泛型中不弄个运行异常支持下呢..
我想可能是因为泛型的出现就是为了解决类型安全,所以就不去设计这种异常.有了那样的异常不就还和过去一样了嘛.

----------------------------------------------------------------------
最近要修整网站,又看到了这个泛型DAO,又细细品味下.多了些问题
也看到了过去一篇帖子
http://www.iteye.com/topic/214658

为什么那条经典的语句写在了GenericDaoImp中也能得了参数类型信息.
根据理解应该也在具体的实现才可以啊.
在具体类的构造方法中,得到了超类,然后再得到参数类型.
但现在是写在了GenericDaoImp中也得到了.

其实关键是对getClass()方法的理解.
过去我一直认为这个方法是得到当前类的Class对象.
也就是说,过去认为GenericDaoImp中的getClass就是得到GenericDaoImp的Class

但是看下JDK API
引用

public final Class<?> getClass()
返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。


其实在GenericDaoImp中的getClass就是得到的就是具体子类的Class.

基础太差了吧.....






1
0
分享到:
评论

相关推荐

    泛型dao 泛型dao 泛型dao

    泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名...

    一个很好的通用泛型dao(含源码)

    而泛型DAO是一个类型安全的,代码精简的设计模式(相对于传统DAO),尤其在DAO组件数量庞大的时候,代码量的减少更加明显。 泛型DAO的核心是定义一个GenericDao接口,声明基本的CRUD操作: 用hibernate作为持久化...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名...

    guicejpa:Jpa2 与 Guice 集成,为类路径中的每个实体自动连接通用 DAO

    吉帕与 Guice 一起使用的 Jpa 模块,为所有用 @Entity 注释的类提供泛型类型安全的 DAO。 这仍然是一个 WIP 模块。 当前特点: 与 Guice 集成,为所有 @Entity 类提供 Typed Daos 的绑定。 #用法您可以签出 repo 并...

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    Java反射技术的一般应用(放低分数供大家学习)

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    Java典型模块

    3.3.1 反射的基石——Class类 3.3.2 反射的基本应用 3.3.3 反射的高级应用 3.4 标注 3.4.1 标注的简单使用 3.4.2 JDK的内置标注 3.5 泛型 3.5.1 为什么要使用泛型 3.5.2 泛型的一些特性 3.5.3 泛型的通配符 3.6 类...

    Java学习笔记-个人整理的

    {4.6}泛型}{84}{section.4.6} {4.7}集合的迭代(Iterator)}{85}{section.4.7} {4.8}Collections集合工具类}{86}{section.4.8} {4.9}Comparable与Comparator}{86}{section.4.9} {4.9.1}Comparable}{86}{...

Global site tag (gtag.js) - Google Analytics