0

我有几个功能...

@Override
public List<ContentType> findAllContentTypes() {
    return this.emf.createEntityManager()
                   .createNamedQuery("ContentType.findAll", ContentType.class)
                   .getResultList();
}

@Override
public List<Status> findAllStatus() {
    return this.emf.createEntityManager()
                   .createNamedQuery("Status.findAll", Status.class)
                   .getResultList();
}

事实上,我有大约 12 个可以得到各种不同的东西。我想采用这些函数并制作一个通用函数来替换所有这些。

我能想到的最好方法是做类似findAll("Language"). 我开始做...

public List<T> findAll(String objectName) {
    return this.emf.createEntityManager()
                   .createNamedQuery(objectName+".findAll", objectName)
                   .getResultList();
}

问题(除了我的 IDE 不知道如何处理T)是我不确定如何获取该字符串并将其传递给ContentType.class.

我错过了什么阻止 Netbeans 识别T

objectName按照我将它作为第二个参数传递给的方式工作createNamedQuery()吗?

4

2 回答 2

4

您需要通过<T>在方法返回类型之前添加类型参数列表(在本例中)来将您的方法声明为泛型。然后只需传入正确类型的类对象作为参数:

public <T> List<T> findAll(Class<T> clazz) {
    return this.emf.createEntityManager().createNamedQuery(
            clazz.getSimpleName()+".findAll", clazz).getResultList();
}
于 2012-04-19T19:26:55.657 回答
2

这样的事情应该可以解决问题:

public <T> List<T> findAll(Class<T> klass) {
    return this.emf.createEntityManager().createNamedQuery(klass.getSimpleName()+".findAll", klass).getResultList();
}
于 2012-04-19T19:27:28.207 回答