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