我正在使用openJPA(有点旧版本1.2),每次演员query.getResultList()
时都会收到警告。我在上一行使用@SuppressWarnings("unchecked")
,所以我可以摆脱那个特定的警告,但是当我需要返回列表时我不能这样做,如下例所示:
// @SuppressWarnings("unchecked") I DON'T WANT TO DO THIS HERE
public <T> List<T> findByQuery(String queryString) {
myEntityManager.createQuery(queryString);
@SuppressWarnings("unchecked") // I WANT TO DO IT HERE
return (List<T>)query.getResultList();
}
我可以这样做:
...
@SuppressWarnings("unchecked")
List<T> result = query.getResultList();
return result;
}
然后sonar抱怨我不应该将列表存储在变量中,而是立即返回它。我最好的选择是什么?
答案 0 :(得分:0)
query.getResultList()
返回List<Object>
。你不想把它强制转换为List<T>
但是java无法定义它是否可能 - 由于类型擦除它们在运行时没有区别。这就是你必须使用@SuppressWarnings("unchecked")
的原因。
有一个简单的解决方案可以摆脱这种情况 - 在新功能中将所有对象强制转换为所需类型。要做到这一点,你现在必须上课 - 所以:
在java 8中
public <T> List<T> findByQuery(String queryString, Class<T> clazz) {
myEntityManager.createQuery(queryString);
return query
.getResultList()
.stream()
.map(result -> clazz.cast(result))
.collect(Collectors.toList());
}
在旧版本的java中,您只需将map函数更改为简单循环,将结果结果放入新List<T>