|
锁定老贴子 主题:利用JDK5的泛型增强Dao基类
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2005-06-07
public abstract class BaseHibernateDao<T> extends HibernateDaoSupport {
public T create(T entity) throws DataAccessException {
getHibernateTemplate().save(entity);
return entity;
}
public Object load(Class cls, Serializable id) throws DataAccessException {
return getHibernateTemplate().load(cls, id);
}
}
public class CounterDao extends BaseHibernateDao<CounterImpl>{}
对于第一个Create方法使用泛型没问题,但是对于第二个load方法,怎么将型别T的Class信息固化在load方法内部呢,而不需要作为Class cls参数传入了。我试过T.Class,代码提示是有的,但是编译不通过 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-08
不行滴,jdk5對泛型是採擦拭法(erase),所以class的型別會消去成object
沒辦法讓你用T.Class這樣的做法滴.... |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-08
既然是基类,那么子类会去继承它,不妨在Spring中对子类进行注入。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-08
2downpour: 能详细说说你的做法吗?thanks
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-09
搞定了,从冰云的blog上得到了启发,看下面这段代码
class Factory<T> { private Class<T> c; public Factory(Class<T> c) { this.c = c; } public T create() throws Exception { return c.newInstance(); } } |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
neo兄:我对这个问题也比较感兴趣,你能不能说得具体点呢。能不能给我看看,你的load方法是怎么写呢?谢谢!!!
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
建立一个类成员
[code:1]private Class<T> cls;[/code:1] 然后就可以使用 [code:1]public Object load(Serializable id) throws DataAccessException { return getHibernateTemplate().load(cls, id); }[/code:1] |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
刚才泛型泛的不彻底,应该这样用
[code:1] public T load(Serializable id) throws DataAccessException { return (T)(getHibernateTemplate().load(cls, id)); } [/code:1] |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
neo 写道 建立一个类成员
[code:1]private Class<T> cls;[/code:1] 然后就可以使用 [code:1]public Object load(Serializable id) throws DataAccessException { return getHibernateTemplate().load(cls, id); }[/code:1] 什么时候给cls赋值呢? |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-17
看不出来这么做有什么意义,你这些基本的操作,不需要泛型
|
|
| 返回顶楼 | |







