2013-05-03 295 views
3
List queryList = executeReadAllSQLQuery(queryString); 
    for (Iterator i = queryList.iterator(); i.hasNext();) { 
     Object values[] = (Object[]) i.next(); 
     FDetails pDetails = transform(values); 
     fDList.add(pDetails); 
     values = null; 
    } 

错误我得到第3行:java.math.BigDecimal cannot be cast to [Ljava.lang.Object;java.math.BigDecimal不能转换为[Ljava.lang.Object;

我变换函数:

private FDetails transform(Object[] values) { 
    FDetails Details = new FDetails(); 
    Details.setPb((BigDecimal)values[0]); 
    Details.setPm((BigDecimal)values[1]); 
    Details.setEl((BigDecimal)values[1]); 
    Details.setUl((BigDecimal)values[1]); 
    return BalanceDetails; 
} 

请大家帮我解决这些问题。

+0

如果您使用泛型而不是原始类型,这将更容易。 – jlordo 2013-05-03 09:31:20

+0

什么是查询?它每行返回一个BigDecimal值,而不是您认为的那样的对象数组。 – 2013-05-03 09:33:03

+1

向我们展示'executeReadAllSQLQuery(queryString);'!!!的代码 – NINCOMPOOP 2013-05-03 09:34:42

回答

2

这个怎么样代码:

@SuppressWarnings("rawtypes") 
List<BigDecimal> queryList = executeReadAllSQLQuery(queryString); 

FDetails details = new FDetails(); 
int i = 0; 
details.setPb(queryList.get(i ++)); 
details.setPm(queryList.get(i ++)); 
... 

fDList.add(pDetails); 

注意:在循环内部调用fDList.add()几乎是c当然是错的。循环会从列表中的一个值,但是你想从列表中的所有五个值,来自这五个价值创造的FDetails一个实例和单实例添加到fDList一次

+0

谢谢Aaron.I已经解决了我的问题 – Dev 2013-05-03 11:16:22

+0

@VampireHunter:那就不要忘了其他人使用这个网站,以及当他们看到不正确的问题,他们会感到困惑答案。要么说我们的答案是正确的,要么发布解决方案。 – 2013-05-03 12:36:15

0

以下行将返回您java.math.BigDecimal,您试图非法转储到Object[]。看来你的queryListList<java.math.BigDecimal>

i.next(); // is returning you a java.math.BigDecimal 
3

从错误中可以明显看出,您的列表queryList实际上是一个BigDecimals列表。因此,这将是工作

BigDecimal value = (BigDecimal) i.next(); 

,但因为它不是你所期望的那么executeReadAllSQLQuery返回错误结果

BTW的for-each会更好看呢

for (Object obj : queryList) { 
    ... 
+0

感谢您的回复。但如果我使用BigDecimal value =(BigDecimal)i.next();那么我怎么能像在transform函数()中那样设置属性,如图所示。 – Dev 2013-05-03 09:43:34

+0

BigDecimal value =(BigDecimal)i.next();会一次返回一个BigDecimal值。行将被更改。我想为我的视图中的单行设置值 – Dev 2013-05-03 09:46:40

+0

@VampireHunter:Java非常不愿在类型之间进行转换。因此,您需要手动创建一个对象数组,然后将值复制到该数组中,然后使用新数组调用该方法。 – 2013-05-03 09:47:22

0

这工作很细!请尝试此操作

HashMap<String, Object> map = new HashMap<String, Object>(); 
    map.put("amt", "1000"); 

    System.out.println("Amount is::" 
      + new BigDecimal((String) map.get("amt"))); 
相关问题