@SuppressWarnings("unchecked")
public static <E> Set<E> getSetOfClass(Query q,Class<E> clazz) {
return new LinkedHashSet<E>( q.getResultList() );
}
我认为这段代码的作用是将
javax.persistence.Query
中的结果集以泛型Set<Class>
的形式返回。
这似乎是一个不错的解决方案,但首先,它确实是我想象的那样吗?这是实现该目标的最佳方式吗?我觉得奇怪的是我从未引用我的clazz
参数,但它似乎确实做到了我想要的。
其次,如果这一切都是正确合理的,那么这个函数可能会出现什么错误?我想,如果我提供了一个错误的类,这个函数就无法运行,尽管我并不确定。
如果我执行以下操作:Query q = em.createQuery("FROM Element");
Set<Fish> s = MyUtil.getSetOfClass( q, Fish.class);
如果Fish
不是Element
的超类,那会发生什么?我应该假设这个函数总是被正确使用,还是应该进行错误处理?人们推荐哪种最佳实践方法?
问候,
Glen x
clazz
,实际上,您不使用类参数是因为您不需要传递它。您可以省略该参数并调用方法:MyUtil.<Fish>getSetOfClass(q)
,但如果您不习惯这种语法,则会更奇怪。我建议按照 @Andreas_D 的建议使用clazz
参数。 - Blaisorblade