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;

我的变换功能:

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

4 回答 4

3

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

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

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

BTW for-each 无论如何都会更好看

for (Object obj : queryList) {
   ...
于 2013-05-03T09:34:00.820 回答
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 一次

于 2013-05-03T09:49:21.707 回答
0

下面的行返回你一个java.math.BigDecimal你试图非法投到的Object[]。看来你queryList是一个List<java.math.BigDecimal>.

i.next(); // is returning you a  java.math.BigDecimal
于 2013-05-03T09:31:44.520 回答
0

这很好用!请试试这个

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

    System.out.println("Amount is::"
            + new BigDecimal((String) map.get("amt")));
于 2015-10-12T08:41:07.267 回答