Java Point2D и Comparable - PullRequest
       5

Java Point2D и Comparable

1 голос
/ 11 сентября 2010

Я делаю TreeSet типа Point2D.Float, создавая его с помощью пользовательского класса Comparable, который реализует compare () типа Point2D.Тем не менее, при вызове «содержит» в TreeSet, я получаю ошибку classcast: 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 Ответ

4 голосов
/ 13 сентября 2010

Добавление моего предыдущего комментария в качестве ответа.Сначала вам нужно инициализировать ваш компаратор.

 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, а не NPE, потому что он пытается привести (Comparator) null по какой-то причинеэто терпит неудачу прежде, чем это фактически пытается вызвать метод сравнения.Но без трассировки стека я не уверен.

...