[英]Type safety: Unchecked cast from List to List<String>
我有這個方法,我將結果轉換為(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;
}
}
在這種情況下,您可以確保使用TypedQuery,參數類型為String。 所以你需要的是
TypedQuery<String> query = getEntityManager().createQuery(queryString, String.class);
由於運行時檢查轉換,您將收到此警告。
即使您使用if(query.getResultList() instanceof List<?>)
您也會收到此警告,所以......
@SuppressWarnings("unchecked")
或 您可能希望使用此特殊的hack來返回正確的類型。 它適用於任何類型的對象,因為String#valueOf(Object)
存在
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;
}
請不要使用@SuppressWarnings
並且不要輸入@SuppressWarnings
,因為這些是容易出錯的方法。 按照以下答案中給出的類似問題給出的建議並使用TypedQuery
: https : TypedQuery
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.