java.lang.ArrayStoreException在整数数组中存储整数
为什么我会得到这个例外java.lang.ArrayStoreException在整数数组中存储整数,java,arrays,Java,Arrays,为什么我会得到这个例外 java.lang.ArrayStoreException: java.lang.Integer at MyLinkedList.toArray(MyLinkedList.java:94) at MyLinkedListTest.toArray_ReturnGenericArray(MyLinkedListTest.java:80) 我正在创建一个整数数组并传入整数值。那么,当我创建同一类型数组的新实例时,为什么我不能为它分配整数值呢 @Override public
java.lang.ArrayStoreException: java.lang.Integer
at MyLinkedList.toArray(MyLinkedList.java:94)
at MyLinkedListTest.toArray_ReturnGenericArray(MyLinkedListTest.java:80)
我正在创建一个整数数组并传入整数值。那么,当我创建同一类型数组的新实例时,为什么我不能为它分配整数值呢
@Override
public <T1> T1[] toArray(T1[] a) {
if (a.length < size) {
a = (T1[]) java.lang.reflect.Array.newInstance(a.getClass(), size);
}
Node<T> current = head;
int i = 0;
Object[] result = a;
while (current != null) {
result[i] = current.value;
i++;
current = current.next;
}
// if array has room to spare set element immediately following end of list to null
if (a.length > i) {
a[i] = null;
}
return a;
}
@Test
void toArray_ReturnGenericArray() {
Integer[] array2 = linkedList.toArray(new Integer[4]);
assertEquals(1, array2[0]);
assertEquals(2, array2[1]);
assertEquals(3, array2[2]);
assertEquals(4, array2[3]);
assertEquals(5, array2[4]);
assertEquals(5, array2.length);
}
@覆盖
公共T1[]toArray(T1[]a){
如果(a.长度<尺寸){
a=(T1[])java.lang.reflect.Array.newInstance(a.getClass(),size);
}
节点电流=头;
int i=0;
对象[]结果=a;
while(当前!=null){
结果[i]=当前值;
i++;
当前=当前。下一步;
}
//若数组有空闲空间,则在列表末尾立即将元素设置为null
如果(a.长度>i){
a[i]=null;
}
返回a;
}
@试验
void to array_return genericarray(){
整数[]array2=linkedList.toArray(新整数[4]);
assertEquals(1,array2[0]);
资产质量(2,array2[1]);
资产质量(3,array2[2]);
资产质量(4,array2[3]);
资产质量(5,array2[4]);
资产质量(5,阵列2.长度);
}
主要问题是这段代码
a.getClass()
它将返回的不是数组组件的类,而是数组本身,例如
[Ljava.lang.Integer
请参阅[L
前缀。您需要使用
a.getClass().getComponentType()
AsArray#newInstance
接受组件类型
newInstance(Class<?> componentType, int length)
newInstance(类componentType,int-length)
使用java.util.array#copyOf(U[],int,java.lang.Class