首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何排除ArrayStoreException的故障

如何排除ArrayStoreException的故障
EN

Stack Overflow用户
提问于 2014-06-12 19:14:21
回答 1查看 235关注 0票数 8

我读过许多关于ArrayStoreExceptions的文章,其中大部分都属于以下几类:

  • 基本误解(将基类放入子类的数组声明中)
  • 在将此错误从列表转换为数组时,类似的误解
  • 围绕数组和泛型的“协变”问题

我的不属于这些类别。还有one other case,OP怀疑是某种只出现在Unix上的bug。我想我正在处理那个案子,我不知道怎样才能更接近这个问题。

我已经尽可能多地分解了代码,看起来如下:

代码语言:javascript
复制
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;

它的产出是:

代码语言:javascript
复制
[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的一个子类,一旦我尝试将它添加到数组中,它就会失败。主机是64位RH,OpenJDK java版本1.7.0.45。

我知道ArrayStoreException在告诉我什么,我的问题是如何在故障排除方面更进一步?如果UserValues是RecordValues,我该去哪里??

EN

回答 1

Stack Overflow用户

发布于 2014-06-13 15:16:33

在发帖后,我放弃了数组,并将其更改为一个列表,该列表虽然仍然失败,但却给出了一个更具体的问题:

代码语言:javascript
复制
Caused by: java.lang.LinkageError: loader constraint violation: when
resolving method
"org.mbe.arscli.datamap.ValueResolver.resolve(Ljava/util/List;)Lorg/mbe/arscli/datamap/RecordValues;"
the class loader (instance of org/apache/tools/ant/loader/AntClassLoader5) of the current class,
org/build/ant/CreateRemedyWo, and the class loader (instance of java/net/URLClassLoader) for resolved class,
org/mbe/arscli/datamap/ValueResolver, have different Class objects for the type )Lorg/mbe/arscli/datamap/RecordValues; used in the
signature 

正如@Taylor猜测的那样,这是由多个类加载器通过gradle造成的。虽然我已经很长时间没有更改这段代码了,但我最近更改了构建文件中的依赖项声明。幸运的是,我从列表中得到的错误比来自数组的错误更精确!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24192198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档