2016-04-29 92 views
1

我得到通過查詢和未來值我試圖迭代值,但會拋出錯誤如何解決java.lang.ClassCastException:java.math.BigDecimal不能轉換爲[Ljava.lang.Object;在Java中

Session session = null; 
    try{ 
    Query qu=session.createSQLQuery("select plot_no from house_details where type='duplex'"); 
    List<Long> li = qu.list(); 
    System.out.println("---li---"+li.toString()); 
    for (Iterator itr = li.iterator(); itr.hasNext();) { 
     Object[] obj = (Object[]) itr.next(); 
     String plotNo = (String) obj[0]; 
     if(plotNo=="501" || plotNo== "520" || plotNo== "601"){ 
     System.out.println("---if---"); 
     //code here 
     } 
     else{ 
     System.out.println("---else---"); 
     //code here 
     } 
    } 
}catch(Exception e){ 
     e.printStackTrace(); 

    }finally { 
     if(session!=null){ 
     session.close(); 
    } 
    } 

輸出:

---li---[501, 0, 101, 101, 114] 
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to [Ljava.lang.Object; 

什麼是錯在我的代碼。錯誤獲取此行

Object[] obj = (Object[]) itr.next(); 
String plotNo = (String) obj[0]; 
+1

你不能投郎數組對象 –

回答

3

的呼叫itr.next返回BigDecimal,不是Object[]。您正在試圖將其轉換爲Object[]

Object[] obj = (Object[]) itr.next(); 
String plotNo = (String) obj[0]; 

你得到了ClassCastException,因爲它不是一個Object[]

替換兩行以上這一行:

String plotNo = itr.next().toString(); 
+0

謝謝它的正常工作。但總是去** else **在我的** if if循環條件中循環任何問題 – Sri

+0

@Sri不要在Java中將字符串與'=='比較。你需要使用'equals'來代替。請參閱[如何在Java中比較字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Jesper

+0

非常感謝您.... – Sri

0

嘗試使用

String testName = obj[0].toString(); 

問候 馬赫什

0
Object[] obj = (Object[]) itr.next(); 
String testName = (String) obj[0]; 

您期望的Java理解你想要做什麼。通常情況會如此,並在文檔中進行描述。實際上,當另一個方法獲得字符串爲arg時,方法toString()被調用。在你的情況下,你期望在拆箱和裝箱方面有類似的東西(它只適用於Object類)。方法toString()不會被調用。

嘗試使用 方法明確存在於類Object中的toString()方法,並且所有類都繼承此方法。這是特別爲這種情況。

String testName = obj[0].toString(); 
相關問題