java - Java中的参数化类

标签 java class parameterized

我在这个 Java 类中做错了什么? clazz 字段始终为空。 clazz 不应该自动填充具体类上定义的类型吗?

谢谢!

public abstract class AbstractDAO<E extends Domain, T extends Number> {

    protected EntityManager em;
    private Class<E> clazz;

    public AbstractDAO(final EntityManager em) {
        this.em = em;
    }

    public E find(T id) {
        return em.find(clazz, id);
    }

    public List<E> findAll() {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<E> cq = cb.createQuery(clazz);
        Root<E> from = cq.from(clazz);
        CriteriaQuery<E> select = cq.select(from);
        return em.createQuery(select).getResultList();
    }

    // other methods
}

最佳答案

不,Java 中没有任何内容会自动填充 Class<T>泛型类中的字段。如果您的泛型类需要知道类型参数之一的类型,则必须添加 Class<T> 类型的构造函数参数。并从那里初始化它。例如,参见类 EnumMap在 JDK 中。

关于java - Java中的参数化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32660294/

相关文章:

vba - 带有事件的应用程序

c++ - 函数在 C++ 中返回一个结构?

Android xml 参数化 View

java - EasyMock 和参数化测试(JUnit 参数化)

java - 在 jython 中导入类

java - 使用 javamail 从我的 gmail 中读取所有新邮件

java - 如何在 Eclipse 3.7.1 中安装 Birt 报表设计器

java - 如何从现有对象的类外部调用该对象的函数?

javascript - css - 以较少的服务器请求频繁更改图像

java - java 中文本字段的准备语句