这是我的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
sort(List<T>, Comparator<? super T>)类型集合中的方法不适用于参数(List<E>, new Comparator<Integer>(){})
你能解释一下我在这里做错了什么吗?
你的instanceof检查并没有真正告诉编译器inputArray是Integer[]- 编译时类型仍然只是E[].
但是,您可以非常轻松地进行投射,此时它可以正常工作:
if (inputArray instanceof Integer[]) {
Integer[] integers = (Integer[]) inputArray;
Collections.sort(Arrays.asList(integers), ...);
}
Run Code Online (Sandbox Code Playgroud)
甚至只是:
if (inputArray instanceof Integer[]) {
Collections.sort(Arrays.asList((Integer[]) inputArray), ...);
}
Run Code Online (Sandbox Code Playgroud)
但是,当你有一个泛型方法然后为特定类型做特定的事情时,你至少应该考虑你是否真的想要一个泛型方法.
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |