2012-10-30 34 views
0

为什么我得到ClassCastException异常: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();”线。 为什么我会遇到这个问题?

任何inputs..im今天重新审视这个问题,并面临问题。

回答

3

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

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

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

尝试铸造CasePmt对象的打击:

CasePmt casePmt = (CasePmt)it.next(); 
+0

我将它转换为CasePmt,但仍然在获得相同的异常在同一行#。 – JNPW

+0

@JNPW:你可以分享你的findAll查询吗? –

+0

其 “SELECT * FROM JTL.Case_VW” – JNPW

0

declayer您的清单,

List<Object[]> list; 

如果你得到的对象数组,只需使用it.next(),而不是

(Object[]) it.next(); 
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