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());
}
});
从Collections
的Java documentation可以看出,在方法sort(List<T> list, Comparator<? super T> c)
中,如果List
是T
那么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());
}
});
我正在尝试使用 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());
}
});
从Collections
的Java documentation可以看出,在方法sort(List<T> list, Comparator<? super T> c)
中,如果List
是T
那么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());
}
});