Java Point2D和Comparable

时间:2010-09-11 18:16:05

标签: java comparable treeset

我正在制作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;
 }
}

关于出了什么问题的任何想法?我已经被困在这里几个小时试图调试它无济于事。感谢。

1 个答案:

答案 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方法之前失败了。没有堆栈跟踪,我不确定。