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();」というエラーが発生しています。ライン。なぜこの問題が発生するのですか?

すべての入力..imは今日これを再検討し、問題に直面しています。

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 に答える