簡體   English   中英

類型安全:未選中從列表到列表的強制轉換<String>

[英]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 ,因為這些是容易出錯的方法。 按照以下答案中給出的類似問題給出的建議並使用TypedQueryhttpsTypedQuery

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM