Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ArrayStoreException在整数数组中存储整数_Java_Arrays - Fatal编程技术网

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()
As
Array#newInstance
接受组件类型

newInstance(Class<?> componentType, int length)
newInstance(类componentType,int-length)
使用
java.util.array#copyOf(U[],int,java.lang.Class