我在项目开发中通过hibernate的getQuery()方法获得查询结果,并传给一个list代码如下:
               _RootDAO.initialize();
Session s = doi15DAO.getSession();
System.out.println(sql);
Query q = doi15DAO.getQuery(sql, s);                List <DimOptInt15min> DOI_List = new ArrayList<DimOptInt15min>();
List list = q.list();
得到一个list,我想做的是把得到的list强制转换为DimOptInt15min的类型。但遇到java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DimOptInt15min的错误。然后我想把这个list的值一项一项取出来,然后转换为DimOptInt15min类型,再放入一个List <DimOptInt15min> DOI_List = new ArrayList<DimOptInt15min>()中,代码如下:
DimOptInt15min doi15 = new DimOptInt15min();
DimOptInt15minPK dopi_pk = new DimOptInt15minPK();// 该表的主键
dopi_pk.setIntersectionid(Integer.parseInt(((List)q.list().get(i)).get(0).toString()));
此行报错 dopi_pk.setCalendarKey(Integer.parseInt(((List)q.list().get(i)).get(1).toString()));
dopi_pk.setFifteenx(Integer.parseInt(((List)q.list().get(i)).get(2).toString()));
doi15.setId(dopi_pk);
doi15.setEbVolumeL(Integer.parseInt(((List)q.list().get(i)).get(3).toString()));
doi15.setEbVolumeS(Integer.parseInt(((List)q.list().get(i)).get(6).toString()));
doi15.setEbVolumeR(Integer.parseInt(((List)q.list().get(i)).get(9).toString()));再次出现的错误为:严重: Servlet.service() for servlet Post_test_demo threw exception
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.List
at org.openflashchart.chartdemo.Post_intersection_data.select(Post_intersection_data.java:172)
at org.openflashchart.chartdemo.Post_intersection_data.doPost(Post_intersection_data.java:148)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)难道不可以将Object转换为List吗??困扰我一天了,求高手指点一下,万分感谢。

解决方案 »

  1.   

    1)List list = q.list(); //应该是个对象list,LZ可以这样试试
      List list = q.list();
      DimOptInt15min[] DOI_List = (DimOptInt15min[] )list.toArray(new DimOptInt15min[list.size()]);2)第二种方法
      List list = q.list();
    List <DimOptInt15min> DOI_List = new ArrayList<DimOptInt15min>();
    for( Object item : lst ) {
    DOI_List.add((DimOptInt15min)item);
    }
      

  2.   

    强行转换必须是类型符合才能正常转换,否则肯定发生异常java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DimOptInt15min的错误。
    从这里可以知道,你的Object是个数组对象,不是List对象,所以不能直接转换成List可以采用1L的方法二,1L的方法一也是不对的
      

  3.   

    也不是说方法一不对,是不一定对,因为不知道LZ的Object数组里保存的是什么
      

  4.   

    多谢楼上回复,问题已经解决了,我将list中的object一个一个取出来了,然后一项一项赋值给新声明的类,最后再放入到另一个list中,方法比较笨,但是还是解决了,谢谢~~~