java.lang.ClassCastException - ((小数)MyObj中[1])的longValue()

时间:2013-12-26 13:31:01

标签: java classcastexception

尝试执行以下代码段时出现以下错误。请告诉我出现此错误的可能原因是什么。

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:...)

5 个答案:

答案 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)

  1. 永远不要使用Raw类型集合:使用适当的Generic类型声明您的集合:List<BigDecimal[]>
  2. myObj不太可能是BigDecimal[]个对象,因此可能会出现ClassCastException

答案 4 :(得分:1)

您正在尝试将 unSupported 对象类型转换为BigDecimal对象。即myObj [1]不是BigDecimal实例。

ClassCastException文件说

抛出以表明代码已尝试强制转换     对象是一个不是实例的子类。