使用泛型问题调用Arrays.sort(数组,比较器)

Osc*_*Ryz 1 java generics

我正在尝试创建一个方法,反过来应该调用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
Run Code Online (Sandbox Code Playgroud)

我通过转换值来解决它,但我真的想知道如何正确编码它.

这是我的(相关)代码:

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");
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

Paŭ*_*ann 6

如果要使用a,则方法不应传递a Comparable[],而应传递T数组Comparator<T>.

这样定义它:

public static <T extends Comparable<T>> void sort( T[] array, final Generics<T,T> g  ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是你为什么要同时使用Comparable和Comparator?通常,想法是使用比较器或元素上的默认顺序(即可比较),但不能同时使用两者.