java.math.BigDecimal无法强制转换为[Ljava.lang.Object;

时间:2013-05-03 09:29:56

标签: java spring spring-mvc

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;

我的转换功能:

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;
}

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:3)

从错误中可以清楚地看出,您的List queryList实际上是一个BigDecimals列表。所以这将是工作

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

但由于它不是您所期望的,因此executeReadAllSQLQuery返回错误的结果

无论如何,BTW for-each看起来会更好

for (Object obj : queryList) {
   ...

答案 1 :(得分: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()几乎肯定是错误的。循环从列表中获取一个值,但您希望列表中的所有五个值,从这五个值创建一个 FDetails实例,并将该单个实例添加到fDList <强>一旦

答案 2 :(得分:0)

以下行会向您返回java.math.BigDecimal,您试图将其非法投射到Object[]。您的queryList似乎是List<java.math.BigDecimal>

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

答案 3 :(得分:0)

这很好用!请试试这个

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

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