【发布时间】:2016-03-12 21:40:44
【问题描述】:
我想通过 E[] toArray(E[] a) 用我的 ArrayQueue 的元素填充一个外部数组,但不知何故,它在第一个 System.arraycopy 方法中抛出了 ArrayStoreException。我想知道如何解决这个问题,更重要的是知道为什么会抛出这个异常。
这是我的代码:
public E[] toArray(E[] a)
{
if(a.length != size)
a=(E[])Array.newInstance(a.getClass(), size);
if(head<tail)
System.arraycopy(elementData, head, a, 0, tail-head); // ArrayStoreException
else
{
System.arraycopy(elementData, head, a, 0, capacity-head);
System.arraycopy(elementData, 0, a, capacity-head, tail);
}
return a;
}
这是外部方法:
String[] words = q.toArray(new String[2]);
感谢您的宝贵时间。
【问题讨论】:
-
你能用minimal reproducible example 来证明这个问题吗? (这是泛型类型吗?我假设是这样的......)您使我们重现的越简单,就越容易为您提供帮助。
-
(实际上,我怀疑我知道问题所在——现在才检查......)
-
对不起,但我不知道我应该提供什么额外信息来解决这个问题。我的 ArrayQueue 是通用的,它有一个包含元素的字段
E[] elementData。elementData的底层类型为Object,在构造函数中被强制转换为(E[]) -
额外信息将是一个简短但完整的示例 - 我们可以复制、粘贴、编译和运行以查看问题。
标签: java arrays generics exception