如何从编译类型中获取 Class 对象?

How do I get a Class object from a compiled type?

我正在使用 Java 6. 我有以下代码 ...

public abstract class AbstractHibernateDAO<T>
{
    ...   
    protected T find(final Serializable id)
    {
        T ret = null;
        if (id != null)
        {
            ret = m_entityManager.find(T, id);
        }   // if
        return ret;
    }

"ret = m_entityManager.find(T, id);" 行有一个编译时错误,因为该方法的第一个参数应该是一个 java.lang.Class 对象,但是,我不知道如何创建给定的对象"T" 编译时参考,或者即使这是可能的。感谢任何帮助。

您可以像这样从 class 签名中提取 class 类型:

    public abstract class AbstractHibernateDAO<T> {
    private Class<T> persistentClass;

    public AbstractHibernateDAO() {
       this.persistentClass = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

    protected T find(final Serializable id)
    {
        T ret = null;
        if (id != null)
        {
            ret = m_entityManager.find(persistentClass, id);
        }   // if
        return ret;
    }