【解決辦法】:http://stackoverflow.com/questions/3437897/how-to-get-a-class-instance-of-generics-type-t
1、純Java方法:http://blog.xebia.com/2009/02/07/acessing-generic-types-at-runtime-in-java/
((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
2、spring的辦法
import org.springframework.core.GenericTypeResolver;
public abstract class AbstractHibernateDao<T extends DomainObject> implements DataAccessObject<T>
{
@Autowired
private SessionFactory sessionFactory;
private final Class<T> genericType;
private final String RECORD_COUNT_HQL;
private final String FIND_ALL_HQL;
@SuppressWarnings("unchecked")
public AbstractHibernateDao()
{
this.genericType = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), AbstractHibernateDao.class);
this.RECORD_COUNT_HQL = "select count(*) from " + this.genericType.getName();
this.FIND_ALL_HQL = "from " + this.genericType.getName() + " t ";
}
}
擴展:
- 泛型(Generic type 或者 generics)是對 Java 語言的類型系統的一種擴展,以支持創建可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符一樣。
- 泛型的主要目標是提高 Java 程序的類型安全。通過知道使用泛型定義的變量的類型限制,編譯器可以在一個高得多的程度上驗證類型假設。沒有泛型,這些假設就只存在於程序員的頭腦中(或者如果幸運的話,還存在於代碼註釋中)。
這類需求往往是在實現數據庫實現當中。
【需求來源】:http://blog.sina.com.cn/s/blog_682e9dfd0100uxjb.html
例子待續。。。