论坛首页 Java版 DAO

利用JDK5的泛型增强Dao基类

浏览 13744 次
精华帖 (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,代码提示是有的,但是编译不通过
   
最后更新时间:2005-06-08
不行滴,jdk5對泛型是採擦拭法(erase),所以class的型別會消去成object
沒辦法讓你用T.Class這樣的做法滴....
   
0 请登录后投票
最后更新时间:2005-06-08
既然是基类,那么子类会去继承它,不妨在Spring中对子类进行注入。
   
0 请登录后投票
最后更新时间:2005-06-08
2downpour: 能详细说说你的做法吗?thanks
   
0 请登录后投票
最后更新时间: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(); }
}
   
0 请登录后投票
最后更新时间:2005-06-10
neo兄:我对这个问题也比较感兴趣,你能不能说得具体点呢。能不能给我看看,你的load方法是怎么写呢?谢谢!!!
   
0 请登录后投票
最后更新时间: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]
   
0 请登录后投票
最后更新时间:2005-06-10
刚才泛型泛的不彻底,应该这样用
[code:1] public T load(Serializable id) throws DataAccessException {
return (T)(getHibernateTemplate().load(cls, id));
} [/code:1]
   
0 请登录后投票
最后更新时间: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赋值呢?
   
0 请登录后投票
最后更新时间:2005-06-17
看不出来这么做有什么意义,你这些基本的操作,不需要泛型
   
0 请登录后投票
论坛首页 Java版 DAO

跳转论坛:
JavaEye推荐