类型安全:未选中从列表到列表<string>的强制转换

时间:2016-06-27 09:06:45

标签: java

我有这个方法,我将结果转换为(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;
        }

    }

4 个答案:

答案 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并且不要输入强制转换,因为这些都是容易出错的方法。按照以下答案中给出的类似问题的建议,并使用TypedQueryhttps://stackoverflow.com/a/21354639/3657198