我正在尝试创建一个方法,该方法又应该调用 Arrays.sort 方法,并且我正在尝试使该方法本身具有通用性。当我尝试创建一个具体的 Comparator
但我总是遇到一个异常时,问题就来了:
Generics.java:15: cannot find symbol
symbol : method sort(java.lang.Comparable[],java.util.Comparator<T>)
location: class java.util.Arrays
Arrays.sort(array, c);
^
1 error
我通过转换值来解决它,但我真的很想知道如何正确编码。
这是我的(相关)代码:
import java.util.*;
abstract class Generics<T1,T2> {
public abstract void run( T1 a , T2 b );
public static <T> void sort( Comparable[] array, final Generics<T,T> g ) {
Comparator<T> c = new Comparator<T>() {
public int compare(T o1, T o2) {
g.run(o1,o2);
return 1;
}
};
Arrays.sort(array,
/* how can I get rid of this cast? */
(Comparator<? super Comparable>)
/* and use only */ c);
}
public static void main( String ... args ) {
Generics.sort( args, new Generics<String,String>() {
public void run( String a, String b ) {
System.out.println( "Irrelevant");
}
});
}
}
最佳答案
您的方法不应传递 Comparable[]
,而是一个 T
数组,如果你想使用 Comparator<T>
.
这样定义它:
public static <T extends Comparable<T>> void sort( T[] array, final Generics<T,T> g ) {
...
}
但是为什么要同时使用 Comparable 和 Comparator 呢?通常的想法是要么使用比较器,要么使用元素的默认顺序(即 Comparable),但不能同时使用这两种方法。
关于java - 使用泛型问题调用 Arrays.sort(array, comparator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6117846/