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

在开发网站过程中就使用了泛型带来的好处..消除了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
[quote]
public final Class<?> getClass()
返回此 Object 的[color=darkred]运行时类[/color]。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。[/quote]

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

基础太差了吧.....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值