1

我正在制作一个 Point2D.Float 类型的 TreeSet,并使用实现 Point2D 类型的 compare() 的自定义 Comparable 类创建它。但是,在 TreeSet 上调用“包含”时,我收到一个类转换错误: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;
 }
}

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

4

1 回答 1

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

于 2010-09-13T04:31:56.450 回答