List <object []> </object []>的类型安全问题

时间:2013-10-08 03:34:12

标签: java generics

我正在使用本机sql从db检索数据。我正在获取Object []列表。

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

我收到警告

  

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

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

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

如果可能的话,你也应该总是记录抑制警告的原因。

答案 1 :(得分:1)

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

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

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

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

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