获取泛型对象


import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.fengyi.dao.IBaseDao;
import com.fengyi.util.PageUtil;

@Repository(value="baseDao")
@SuppressWarnings("unchecked")
public class BaseDao<T> extends HibernateDaoSupport implements IBaseDao<T> {

 private Class<T> clzz;

 @Resource(name = "sessionFactory")
 public void setSuperSessionFactory(SessionFactory sessionFactory) {
  super.setSessionFactory(sessionFactory);
 }

 // 獲取泛型的Class對象
 private Class<T> getClzz() {
  clzz = (Class<T>) getClass(); 
  while (clzz != null && clzz != Object.class) {
   Type t = clzz.getGenericSuperclass();
   if (t instanceof ParameterizedType) {
    Type[] args = ((ParameterizedType) t).getActualTypeArguments();
    if (args[0] instanceof Class) {
     this.clzz = (Class<T>) args[0];
     break;
    }
   }
   clzz = (Class<T>) clzz.getSuperclass();
  }
  return clzz;
 }

}
 ..........

 

posted on 2013-01-29 23:40  java_fengyi  阅读(278)  评论(0编辑  收藏  举报