gpt4 book ai didi

java - 转换到泛型导致 Java 中的 ArrayStoreException

转载 作者:行者123 更新时间:2023-12-01 14:10:18 26 4
gpt4 key购买 nike

我正在创建一个类,其中包含名为 arrayObject[] 类型的实例变量。此类包含返回 T[] 的方法,其中 T 是泛型。该方法应将 array 的内容复制到要返回的数组中。相关代码如下所示:

@SuppressWarnings("unchecked")
T[] arr = (T[])Array.newInstance(a.getClass(), array.length);
for (int i = 0; i < array.length; i++) {
@SuppressWarnings("unchecked")
T temp = (T)array[i];
arr[i] = temp;
}
return arr;

在上面的代码片段中,a 是作为参数传递的另一个数组。

问题是,当我调用该方法时,它抛出一个 ArrayStoreException。我不确定为什么要这样做,因为在将初始值存储到类型为 T[] 的数组之前,我将初始值强制转换为类型 T,因此类型匹配。为什么还是抛异常?

最佳答案

使用该代码,您可以创建一个 T[][]因为a.getClass()Class<T[]> .

你要的是a.getClass().getComponentType() ,这就是实际的 Class<T>

所以:

@SuppressWarnings("unchecked")
T[] arr = (T[])Array.newInstance(a.getClass().getComponentType(), array.length);
for (int i = 0; i < array.length; i++) {
@SuppressWarnings("unchecked")
T temp = (T)array[i];
arr[i] = temp;
}
return arr;

或者你可以使用jre方法

Arrays.copyOf(array, array.length); // creates a new array and copies the content

关于java - 转换到泛型导致 Java 中的 ArrayStoreException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62293562/

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