0

为什么我会收到 ClassCastException:

包装异常:

java.lang.ClassCastException: com.avt.model.CasePmt
    at com.avt.dao.impl.CasePmtDaoImpl.findAllCasePmt(CasePmtDaoImpl.java:68)
    at com.avt.ViewCasePmtAction.view(ViewCasePmtAction.java:127)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
    at gov.pbgc.spectrum.util.SpectrumLookupDispatchAction.execute(SpectrumLookupDispatchAction.java:113)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)    
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

我的实现类是

public List<CasePmt> findAllCasePmt() {
            List list;
            list = getHibernateTemplate().executeFind(new HibernateCallback() {
                    public Object doInHibernate(Session session)
                                    throws HibernateException, SQLException {

                            Query q = session
                                            .getNamedQuery("findAll");
                            return q.list();
                    }
            });
            Iterator it = list.iterator();
            List<CasePmt> l = new ArrayList<CasePmt>();

            CasePmt voObj;
            while (it.hasNext()) {
                    voObj = new CasePmt();

                    Object[] objs = (Object[]) it.next();
                    // System.out.print("\n" + objs[0].toString());

                    if (objs[2] != null) {
                            voObj.setCaseTxNum(objs[1].toString());
                    }


    .......................
                        }
                    l.add(voObj);
            }
            return l;
    }

我的行动呼吁是:

List<CasePmt> CsList =       
             CasePmtBo.getCaseDao().findAllCasePmt();

我在第 68 行遇到错误,即“Object[] objs = (Object[]) it.next();” 线。为什么我会遇到这个问题?

任何输入..我今天重新审视这个并面临这个问题。

4

3 回答 3

3

我假设,您findAll查询的是检索所有CasePmt对象。在这种情况下,我认为您在以下行有问题:

 Object[] objs = (Object[]) it.next();

因为您的迭代器将返回CasePmt对象。

尝试将其投射到CasePmt对象上作为打击:

 CasePmt casePmt = (CasePmt)it.next();
于 2012-10-30T18:45:51.787 回答
1

一般来说,只要您有一个您不理解的 ClassCastException,而不是

Object[] objs = (Object[]) it.next();
[...]

尝试

Object o = it.next();
if (o instanceof Object[])
{
    Object[] objs = (Object[]) o;
    [...]
}
else if (o != null)
{
    System.out.println("Retrieved object of class " + o.getClass());
    // ... or however you want to inspect the class of the object you retrieved
}
else
    // process null value
于 2012-10-30T19:41:06.430 回答
0

将您的列表延迟为

  List<Object[]> list;  

如果您正在获取对象数组并使用 it.next() 而不是

 (Object[]) it.next();
于 2012-10-30T18:52:52.237 回答