Point2D 比较器抛出错误

Point2D Comparator throwing an error

我正在尝试使用 Collections.sort() 对 List<Point2D> 个点进行排序。我相信我正确设置了这个比较器。无论如何,它会抛出一条错误消息:The method sort(List<T>, Comparator<? superT>) in the type Collections is not applicable for the arguments (List<Point2D>, new Comparator<Point2D.Double>(){})。有人知道为什么我的编译器会抛出这个错误吗?

Collections.sort(points, new Comparator<Point2D.Double>() {
    public int compare(Point2D.Double p1, Point2D.Double p2) {
        return Double.compare(p1.getX(), p2.getX());
    }
});

只需删除 .Double ,您的 Comparator 应该与您的 List.

属于同一类型(或父类型)
   Collections.sort(points, new Comparator<Point2D>() {
        public int compare(Point2D p1, Point2D p2) {
            return Double.compare(p1.getX(), p2.getX());
        }
    });

CollectionsJava documentation可以看出,在方法sort(List<T> list, Comparator<? super T> c)中,如果ListT那么Comparator可以是类型 T 或其父 classes(包括 T 本身)。

在您的情况下,您有 List<Point2D> &Comparator<Point2D.Double>,并且 Point2D.Double 不是 Point2D 的父级 class。

关于<? super T>参考this link

将您的代码更改为以下内容:

List<Point2D> points = new ArrayList<Point2D>();
Collections.sort(points, new Comparator<Point2D>() {
    public int compare(Point2D p1, Point2D p2) {
        return Double.compare(p1.getX(), p2.getX());
    }
});