2

我正在使用本机 sql 从数据库中检索数据。我正在获取对象 [] 的列表。

List<Object[]> objectList = session.createSQLQuery(query).setParameter("customerId", customerId).list();

我低于警告

类型安全:List 类型的表达式需要未经检查的转换才能符合 List

如何解决这个问题?

4

2 回答 2

3

这可能是因为您使用的 API 不支持泛型。考虑升级到最新版本或使用@SuppressWarnings。

当然,只有当您绝对确定查询是否返回正确的类型时,您才应该使用 @SuppressWarnings。

如果可能的话,您还应该始终记录禁止警告的原因。

于 2013-10-08T03:38:05.363 回答
1

当使用不支持泛型的 api 返回参数化类型时,类型参数必须被视为通配符。

List<?> objectList = session.createSQLQuery(query).setParameter("customerId", customerId).list();

以上将在没有警告的情况下编译。显然这不是你想要的类型。因此,您必须逐项测试演员表,因为从技术上讲,aList<?>可以包含任何内容。

for(Object object : objectList){
    if(object instanceof Object[]){
       //Do stuff.
    }
}

现在在实践中,如果您提前知道返回类型应该是什么,您可以取消警告并继续。只要知道如果你错了,你会在访问列表的代码中抛出转换异常,而不是在整个列表中执行不正确“转换”的代码。

于 2013-10-08T03:51:29.053 回答