匿名内部类重写方法报错

使用匿名内部类重写Comparator中的compara方法报错:

img


报错信息为:
reason: no instance(s) of type variable(s) T exist so that int[] conforms to T[]

  • 你array数组中的元素类型 应该不是 Integer吧
// array定义成 Integer 包装类数组
Integer[] array;
  • 为啥要定义 Integer数组,这就要看 Arrays.sort 的源码实现了,如下图可以看出 有两种情况:
  1. 数组的元素类型 和 比较器的 泛型类型是一样的,可行。
  2. 比较器的泛型类型 是 数组元素类型的 超类也是可以的。

img

  • 比如 Number 是 Integer 的父类,也可以如下调用:

img

你的array好像是基础类型 int[]的,这种类型的没有必要去重写,本来就存在 Arrays.sort(int[] a)这个方法的

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误通常是因为泛型类型参数没有正确指定引起的。在使用Comparator时,应该指定其类型参数,以便在比较时正确比较元素的类型。
以下是一个使用匿名内部类重写Comparator中的compare方法的示例代码:

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        int[][] arr = {{2, 4}, {3, 1}, {1, 5}, {4, 3}};
        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];
            }
        });
        System.out.println(Arrays.deepToString(arr));
    }
}

在这个示例代码中,使用了Arrays.sort方法对一个二维数组进行排序,传入了一个Comparator的匿名内部类来实现比较逻辑。在定义匿名内部类时,指定了类型参数为int[],表示比较的是一个整型数组。然后在compare方法中,按照二维数组的第一个元素进行升序排序,返回结果即可。

需要注意的是,如果使用了泛型类型参数,要确保所有使用到该类型参数的地方都正确指定了泛型类型参数。如果仍然报错,可能是其他代码中存在问题,需要进一步排查。