gpt4 book ai didi

java - 在 Java 中使用泛型对数组进行排序时出现编译时错误

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

这是我的代码:

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class SortingUsingGenerics {

public static void main(String[] args) {
Integer[] intArray = {1,5,4,2,10};
String[] stringArray = {"Ä","X","C","B","M"};
Float[] floatArray = {1.5f,2.8f,0.5f,10.3f,9.5f};

// Sort and Print
printArray(sortArray(intArray));
printArray(sortArray(stringArray));
printArray(sortArray(floatArray));

}

private static <MyArray> void printArray(MyArray[] inputArray) {
for (MyArray element : inputArray) {
System.out.print(element);
}
System.out.println();
}

public static <E> E[] sortArray(E[] inputArray){

if (inputArray instanceof Integer[]){
Collections.sort(Arrays.asList(inputArray),new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
if (o1 == o2) {
return 0;
} else if (o1 > 02) {
return 1;
} else {
return -1;
}
}

});
}
return inputArray;
}
}

我得到的错误是:

The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (List<E>, new Comparator<Integer>(){})

你能解释一下我做错了什么吗?

最佳答案

您的 instanceof 检查并没有真正告诉编译器 inputArray 是一个 Integer[] - 编译时类型仍然只是E[]

但是,您可以非常轻松地进行转换,此时它将起作用:

if (inputArray instanceof Integer[]) {
Integer[] integers = (Integer[]) inputArray;
Collections.sort(Arrays.asList(integers), ...);
}

甚至只是:

if (inputArray instanceof Integer[]) {
Collections.sort(Arrays.asList((Integer[]) inputArray), ...);
}

但是,当您拥有一个泛型方法然后针对特定类型执行特定操作时,您至少应该考虑毕竟您是否真的需要一个泛型方法。

关于java - 在 Java 中使用泛型对数组进行排序时出现编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922841/

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