2011-08-31 38 views
0

我有下面的代码有问题:什么导致java.lang.ClassCastException:[Ljava.lang.Object ;?

List<book> list = new ArrayList(); 
    if(request.getAttribute("bookDeatils")!=null) 
    { 
     list = (ArrayList)request.getAttribute("bookDeatils"); 
      System.out.println("inside loop List --- "+list.size()); 
      for(book book : list) 
       { 
       out.println("<tr><td>"+book.getId()+"</td></tr>"); 
     } 
      } 
    System.out.printl``n(" List --- "+list.size()); 
%> 

是表示java.lang.ClassCastException: [Ljava.lang.Object;

我在做什么错?

+0

请在Stack Overflow提问时注意我的编辑。此外,请花些时间阅读我们的[FAQ](http://stackoverflow.com/faq)。 –

回答

0

它看起来像getAttribute返回一个数组,你试图把它转换成数组列表。你不能做到这一点,而不是你需要保存的getAttribute结果在一个数组

book[] list; 
list = (book[])request.getAttribute("bookDeatils"); 

而且,其对标准的Java命名约定让你的类名开始与一个小写字母。

+0

它显示java.lang.ClassCastException:java.util.ArrayList不能转换为[Lcom.rec.bookbank.persitencejavafile.book;例外 –

0

如果您发布堆栈跟踪,我们可以确定确切的线。但是,当使用泛型集合时,混合泛型和非泛型集合是灾难的秘诀。

你的第一行应该是这样的:

List<book> list = new ArrayList<book>(); 

如果getAttribute方法返回一个数组,有一个在使用列表仅与foreach循环迭代是没有意义的。您可以对数组执行相同的操作,但首先检查它是否为空。

而且,用小写命名类书是违反Java约定的。

2

您的List<book>实际上 a List<Object[]>。这将导致在该增强for循环中的CCE。

当您使用JPA执行类似SELECT b.id, b.title FROM Book b而不是SELECT b FROM Book b时,可能会发生这种情况。


无关到具体的问题,你的代码风格是非常差的。不要使用小写启动Java类名。这让开发人员和未来的维护人员感到困惑。了解Java Naming Coventions。也不要在JSP文件中编写Java代码。 Java代码属于Java类。您应该仅在JSP文件中使用taglibs/EL。了解ServletsJSTL。你的整个循环可以很容易地完成,如下所示:

<c:forEach items="${bookDeatils}" var="bookDetail"> 
    <tr><td>${bookDetail.id}</td></tr> 
</c:forEach> 
相关问题