java - 使用泛型问题调用 Arrays.sort(array, comparator)

标签 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

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

这是我的(相关)代码:

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/

相关文章:

java - 无法使用 Java 泛型选择合适的方法

java - Maven 插件可以在作为构建的一部分创建的 JAR 上运行吗

java - 无法从选择框获取值到 servlet

java - 在 Swing 中制作股票行情自动收录器

java - 使用泛型/继承组合不同类型的命令接口(interface)

c# - 将 IsAssignableFrom 与 'open' 泛型类型一起使用

java - 在 Spring Boot 中将无效的 json 请求正文传递给 Rest api 时未收到异常

java - 从具有复合键值的 HashMap 中删除键

Java 泛型和原始类型

java - 泛型类型函数的返回语句错误