我已经阅读了许多有关ArrayStoreExceptions的帖子,其中大多数属于以下类别之一:
我的不属于任何这些类别。 OP有one other case,它怀疑只有在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的子类,但是,一旦我尝试将其添加到数组中,它就会失败。主机是64位RH linux,OpenJDK java版本1.7.0.45。
我知道ArrayStoreException告诉我什么,我的问题是如何在故障排除中更进一步?如果UserValues是A RecordValues,那我从哪里去呢?
最佳答案
发布后,我放弃了该数组,将其更改为List,尽管仍然失败,但产生了一个更具体的问题:
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引起的。尽管我很长一段时间都没有更改此代码,但是最近我更改了构建文件中的依赖项声明。幸运的是,我从列表中得到的错误比数组中的错误更精确!