簡體   English   中英

如何解決java.lang.ClassCastException:無法將java.math.BigDecimal強制轉換為[Ljava.lang.Object; 在java中

[英]how to solve java.lang.ClassCastException: java.math.BigDecimal cannot be cast to [Ljava.lang.Object; in 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];

調用itr.next返回一個BigDecimal ,而不是Object[] 您正在嘗試將其強制轉換為Object[]

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

您會收到ClassCastException因為它不是Object[]

用這一行替換上面的兩行:

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

您期望Java能夠理解您想要做什么。 通常,這是正確的,並在文檔中進行了描述。 實際上,當另一個方法獲取字符串作為arg時,將調用toString()方法。 在您的情況下,您希望在拆箱和裝箱時有類似的事情(僅對Object類適用)。 並且方法toString()不會被調用。

嘗試顯式使用Object類中存在的toString()方法,並且所有類都繼承此方法。 在這種情況下,它是特殊的。

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

嘗試使用

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

問候Mahesh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM