如何解决使用泛型问题调用Arrays.sortarray,比较器
|| 我正在尝试创建一个方法,该方法又应调用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\");
}
});
}
}
解决方法
如果要使用
Comparator<T>
,则方法不应传递Comparable[]
,而应传递T
数组。
这样定义它:
public static <T extends Comparable<T>> void sort( T[] array,final Generics<T,T> g ) {
...
}
但是,为什么要同时使用Comparable和Comparator?通常,想法是使用比较器或元素的默认顺序(即可比较),但不能同时使用两者。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。