我有一些功能......
@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
将{I}}作为第二个参数传递给createNamedQuery()
吗?
答案 0 :(得分:4)
您需要在方法返回类型之前添加类型参数列表(在本例中为<T>
),将方法声明为通用方法。然后只需将正确类型的类对象作为参数传递:
public <T> List<T> findAll(Class<T> clazz) {
return this.emf.createEntityManager().createNamedQuery(
clazz.getSimpleName()+".findAll", clazz).getResultList();
}
答案 1 :(得分:2)
这样的事情可以解决问题:
public <T> List<T> findAll(Class<T> klass) {
return this.emf.createEntityManager().createNamedQuery(klass.getSimpleName()+".findAll", klass).getResultList();
}