我看了一下ArrayStoreExceptions很多帖子,其中大部分属于这些类别之一:我怎样才能解决一个ArrayStoreException信息
- 基本误解(把一个基类到子类的数组声明)
- 类似的误解,同时收到此错误从列表转换为数组
- “协变”周围的阵列VS仿制药
问题煤矿不属于任何的这些类别。有one other case,OP怀疑有某种只在Unix上出现的错误。我想我有这种情况,我不知道如何更接近这个问题。
我已经断码下来,尽我所能,它看起来像这样:
System.out.println("Declaring RecordValues array");
RecordValues[] rv = new RecordValues[3];
System.out.println("This array is meant for "+rv.getClass().getComponentType());
System.out.println("Adding user defaults which is: "+userdefaults.getClass().getName());
System.out.println("Its parent is: "+userdefaults.getClass().getSuperclass().getName());
rv[0] = userdefaults;
System.out.println("Adding templvalues which is: "+tmplvalues.getClass().getName());
rv[1] = tmplvalues;
System.out.println("Adding sessionvalues which is: "+tmplvalues.getClass().getName());
rv[2] = sessionvalues;
,并将其输出:
[ant:createwo] Declaring RecordValues array
[ant:createwo] This array is meant for class org.kp.mbe.arscli.datamap.RecordValues
[ant:createwo] Adding user defaults which is: org.kp.mbe.arscli.datamap.UserValues
[ant:createwo] Its parent is: org.kp.mbe.arscli.datamap.RecordValues
:createwo FAILED <--
...
Caused by: java.lang.ArrayStoreException: org.mbe.arscli.datamap.UserValues
UserValues是子类型RecordValues的。我已经使用有问题的类创建了一些简单的测试,但不能复制错误。此外(这里真是奇怪的部分),这已经工作了六个月以上。我已经对该工具的其他部分进行了更改,但在这些库附近没有任何地方。它突然出现了。
我想知道还有什么可能导致ArrayStoreException。我100%肯定UserValues是RecordValues的子类,只要我尝试将它添加到数组中,它就会失败。主机是64bit RH linux,OpenJDK java版本为1.7.0.45。
我知道ArrayStoreException告诉我什么,我的问题是如何在故障排除中进一步采取这一步?如果UserValues是一个RecordValues,我该从哪里去?
它可能是与不同类加载器和类的不同版本相关的东西?尝试添加一个'instanceof'检查,例如'if(userdefaults instanceof RecordValues){/ * print out something * /}' – Taylor
另外,您确定RecordValues [] rv = new RecordValues [3]的实例化;'是准确的,而不是间接完成的?通过实例化我的意思是'='后的东西) – Taylor
你击中了头部,我更新了答案。 – AndyJ