我有这个方法,我将结果转换为(List),但我的日食仍在抱怨! 类型安全:从列表到列表的未选中广告
@Override
public List<String> getDevices(Long productId) {
String queryString = "SELECT op.name FROM t_operation op WHERE op.discriminator = 'ANDROID' and PRODUCT =:productId ";
try {
Query query = getEntityManager().createQuery(queryString);
query.setParameter("productId", productId);
return (List<String> ) query.getResultList();
} catch (RuntimeException re) {
throw re;
}
}
答案 0 :(得分:5)
在这种情况下,您可以确保使用TypedQuery,参数类型为String。所以你需要的是
TypedQuery<String> query = getEntityManager().createQuery(queryString, String.class);
答案 1 :(得分:2)
由于运行时检查转换,您将收到此警告。
即使您使用if(query.getResultList() instanceof List<?>)
,也会收到此警告,因此......
@SuppressWarnings("unchecked")
或答案 2 :(得分:2)
您可能希望使用此特殊黑客来返回正确的类型。它适用于任何类型的对象,因为try {
Query query = getEntityManager().createQuery(queryString);
query.setParameter("productId", productId);
return query.getResultList().stream().map(String::valueOf).collect(Collectors.toList());
} catch (RuntimeException re) {
throw re;
}
存在
combo.setSelection()
答案 3 :(得分:2)
请不要使用@SuppressWarnings
并且不要输入强制转换,因为这些都是容易出错的方法。按照以下答案中给出的类似问题的建议,并使用TypedQuery
:https://stackoverflow.com/a/21354639/3657198