gpt4 book ai didi

java - 如何解决 ArrayStoreException

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:51 26 4
gpt4 key购买 nike

我读过很多关于 ArrayStoreExceptions 的帖子,其中大部分都属于以下类别之一:

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

我的不属于这些类别中的任何一个。有 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 的子类,但当我尝试将它添加到数组时,它失败了。主机是64位RH linux,OpenJDK java版本1.7.0.45。

我知道 ArrayStoreException 告诉我的是什么,我的问题是如何进一步解决问题?如果 UserValues 是一个 RecordValues,我从这里去哪里?

最佳答案

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

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 引起的。虽然我已经很久没有更改这段代码了,但我最近更改了构建文件中的依赖项声明。幸运的是,我从 List 中得到的错误比从 Array 中得到的错误更精确!

关于java - 如何解决 ArrayStoreException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com