2011-08-31 36 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> 
相關問題