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;
}
请帮我解决这个问题。
答案 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")));