2016-08-12 60 views
1

我轉換列表時,列出如何轉換列表<?>列出<className>

List<ContentDes> contentDes_ls = new ArrayList<ContentDes>(); 
     logger.info("in getContentDes "); 

     List<?> ls = ho.getResultListByLimit(sql,limit); 
     contentDes_ls = (List<ContentDes>)ls; 
    logger.info(" size of content "+contentDes_ls.size()); 
    for (ContentDes contentDes : contentDes_ls) { 
     logger.info(contentDes.getPricetag()); 
     logger.info(contentDes.getPrv()); 
    } 

它工作得很好,當我得到的List<SomeClass>大小,但面臨着一些問題,當我 訪問SomeClass我的getter和setter有例外

輸出:未提及

size of content 2 

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.SomeClass] 
+1

通用類型不能直接進行類別轉換。您可以使用Object迭代列表,並通過instanceof判斷類,並進行類投射。 – MageXellos

回答

3

SomeClass的anywher e在你的代碼中,所以我假定你的意思是ContentDes。

看起來您的列表不包含ContentDes實例。例外表示項目不是Object[]。當您嘗試迭代ContentDes時,這會導致ClassCastException。

+0

@ marthursson:你是對的.. thanx的幫助 我的getResultListByLimit(sql,limit)proforms操作: 列表 ls_obj = session.createQuery(query).setMaxResults(limit).list(); 是否有任何方法可以將此結果直接投入列表中 我知道的一種方法是爲每個循環創建對象,然後使用ContentDes類的setter方法設置這些值,然後將其添加到列表中以便爲每個循環使用

+0

當您將列表轉換爲列表時,您基本上是在告訴編譯器「別擔心,我確定列表包含此類型的對象」。如果它們不屬於這種類型,就沒有辦法神奇地讓系統翻譯對象 - 您將需要爲此編寫明確的代碼。現在,列表不包含ContentDes實例的原因是另一個問題。從您的評論中可以看出,這是一個與Hibernate相關的問題,對於當前的問題來說,這將成爲焦點話題。 – marthursson

相關問題