我正在制作Point2D.Float类型的TreeSet,使用自定义Comparable类创建它,该类实现Point2D类型的compare()。但是,在TreeSet上调用“contains”时,我收到了一个分类错误:java.lang.ClassCastException: java.awt.geom.Point2D$Float cannot be cast to java.lang.Comparable
该集创建如下:
private CoordinateComparator coordCompare;
public TreeSet<Point2D.Float> coordSet = new TreeSet<Point2D.Float>(coordCompare);
这是我的比较课程:
public class CoordinateComparator implements Comparator<Point2D.Float> {
public CoordinateComparator() {}
@Override
public int compare(Point2D.Float p1, Point2D.Float p2) {
if (p1.getX() < p2.getX())
return -1;
if (p1.getX() > p2.getX())
return 1;
if (p1.getY() < p2.getY())
return -1;
if (p1.getY() > p2.getY())
return 1;
return 0;
}
}
关于出了什么问题的任何想法?我已经被困在这里几个小时试图调试它无济于事。感谢。
答案 0 :(得分:4)
添加我以前的评论作为答案。您需要先初始化比较器。
public class CoordinateComparator implements Comparator<Point2D.Float> {
public CoordinateComparator() {}
@Override
public int compare(Point2D.Float p1, Point2D.Float p2) {
if (p1.getX() < p2.getX())
return -1;
if (p1.getX() > p2.getX())
return 1;
if (p1.getY() < p2.getY())
return -1;
if (p1.getY() > p2.getY())
return 1;
return 0;
}
}
CoordinateComparator coordCompare = new CoordinateComparator();
TreeSet<Point2D.Float> coordSet = new TreeSet<Point2D.Float>(coordCompare);
@ the-alchemist,我猜他正在获得Class Cast Exception而不是NPE,因为它试图强制执行(Comparator) null
并且由于某种原因在实际尝试调用compare方法之前失败了。没有堆栈跟踪,我不确定。