锁定老帖子 主题:利用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,代码提示是有的,但是编译不通过 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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
建立一个类成员
private Class<T> cls; 然后就可以使用 public Object load(Serializable id); throws DataAccessException { return getHibernateTemplate();.load(cls, id);; } |
|
返回顶楼 | |
发表时间:2005-06-10
刚才泛型泛的不彻底,应该这样用
public T load(Serializable id); throws DataAccessException { return (T);(getHibernateTemplate();.load(cls, id););; } |
|
返回顶楼 | |
发表时间:2005-06-10
neo 写道 建立一个类成员
private Class<T> cls; 然后就可以使用 public Object load(Serializable id); throws DataAccessException { return getHibernateTemplate();.load(cls, id);; } 什么时候给cls赋值呢? |
|
返回顶楼 | |
发表时间:2005-06-17
看不出来这么做有什么意义,你这些基本的操作,不需要泛型
|
|
返回顶楼 | |