尝试执行以下代码段时出现以下错误。请告诉我出现此错误的可能原因是什么。
List list = .... ;
for(Object obj:list)
{
Object[] myObj = (Object[])obj;
Long lg = ...;
if(myObj[1]!=null){
lg = ((BigDecimal)myObj[1]).longValue();
}
java.lang.ClassCastException
at java.lang.Class.cast(Class.java:...)
答案 0 :(得分:3)
的原因obj
不是数组或myObj[1]
不是BigDecimal。
要调试它,您可以添加以下行:
System.out.println(obj.getClass());
System.out.println(myObj[1].getClass());
这将告诉你它究竟是什么。
答案 1 :(得分:3)
通过显式强制转换,您告诉编译器相信您知道自己在做什么。因此,您的程序编译但崩溃是因为.. myObj[1]
不 a BigDecimal
,您欺骗了编译器,现在是他最好的朋友(JVM) )很生气。
答案 2 :(得分:2)
因为myObj[1]
不是BigDecimal
。
当您尝试将Object的实例强制转换为不是的类型时,会发生ClassCastException。
答案 3 :(得分:2)
List<BigDecimal[]>
myObj
不太可能是BigDecimal[]
个对象,因此可能会出现ClassCastException
。答案 4 :(得分:1)
您正在尝试将 unSupported 对象类型转换为BigDecimal
对象。即myObj [1]不是BigDecimal实例。
ClassCastException
文件说
抛出以表明代码已尝试强制转换 对象是一个不是实例的子类。