gpt4 book ai didi

java - 使用 Array.newInstance() 创建一个新的泛型类型数组

转载 作者:搜寻专家 更新时间:2023-11-01 01:05:11 26 4
gpt4 key购买 nike

为了练习,我正在尝试实现合并排序算法,但在尝试实例化泛型类型数组时很快就卡住了。我不完全确定我的计划是否会成功,但现在有趣的部分(或令人沮丧,取决于你问我的时间)是 merge() 方法中的第二行。 newInstance() 方法需要知道它应该作为哪个类启动,但即使 arr1.getClass() 编译得很好,它也不会在运行时工作。

public void mergeSort(T[] arr) {

T[] merged = merge(Arrays.copyOfRange(arr, 0, arr.length/2), Arrays.copyOfRange(arr, arr.length/2+1, arr.length-1));

}

@SuppressWarnings({"unchecked"})
public T[] merge(T[] arr1, T[] arr2) {
// A new array of type T that will contain a merged version of arr1 and arr2
T[] merged = (T[]) Array.newInstance(arr1.getClass(), arr1.length+arr2.length);

int i1 = 0, i2 = 0;
for (int i = 0; i < arr1.length + arr2.length; i++) {
if (arr1[i1].compareTo(arr2[i2]) < 0) {
merged[i] = arr1[i1];
i1++;
} else {
merged[i] = arr2[i2];
i2++;
}
}

return merged;
}

错误信息是:

Exception in thread "main" java.lang.ClassCastException: [[Ljava.lang.String; cannot be cast to [Ljava.lang.Comparable;
at sort.SortingAndSearching.merge(SortingAndSearching.java:94)
at sort.SortingAndSearching.mergeSort(SortingAndSearching.java:84)
at sort.SortingAndSearching.main(SortingAndSearching.java:19)

最佳答案

我想我看到了问题...当您执行 Array.newInstance(...) 时,它接受组件类型(在您的情况下,您希望它是 String)。但是,您正在处理数组类(arr1 的类型为 String[],并且您正在执行 arr1.getClass())。相反,做

arr1.getClass().getComponentType()

String[] 中获取 String

根据 javadoc :

 static Object newInstance(Class<?> componentType, int[] dimensions) 

componentType - the Class object representing the component type of the new array

关于java - 使用 Array.newInstance() 创建一个新的泛型类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12789854/

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