论坛首页 Java企业应用论坛

利用JDK5的泛型增强Dao基类

浏览 23485 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-06-07  
DAO
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  
建立一个类成员
private Class<T> cls;

然后就可以使用
public Object load(Serializable id); throws DataAccessException {
		return getHibernateTemplate();.load(cls, id);;
	}
0 请登录后投票
   发表时间:2005-06-10  
刚才泛型泛的不彻底,应该这样用
	public T load(Serializable id); throws DataAccessException {
		return (T);(getHibernateTemplate();.load(cls, id););;
	}	

0 请登录后投票
   发表时间:2005-06-10  
neo 写道
建立一个类成员
private Class<T> cls;

然后就可以使用
public Object load(Serializable id); throws DataAccessException {
		return getHibernateTemplate();.load(cls, id);;
	}


什么时候给cls赋值呢?
0 请登录后投票
   发表时间:2005-06-17  
看不出来这么做有什么意义,你这些基本的操作,不需要泛型
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics