如何解决java.lang.ClassCastException:java.math.BigDecimal不能在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()。

尝试使用方法toString()显式存在于类Object中,并且所有类都继承此方法。它是专门为这个案子设计的。

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

尝试使用

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

问候Mahesh

最新更新