2010-09-11 40 views
1

我正在创建Point2D.Float类型的TreeSet,并使用实现Point2D类型的compare()的自定义Comparable类来创建它。然而,在通话中 “包含” 在TreeSet中,我得到一个classcast错误:java.lang.ClassCastException: java.awt.geom.Point2D$Float cannot be cast to java.lang.ComparableJava Point2D和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

在将它传递给TreeSet之前,您正在初始化您的CoordinateComparator?像这样:coordCompare = new CoordinateComparator(); – 2010-09-11 18:28:43

+0

哦,我的上帝。我是一个白痴。非常感谢! – Dan 2010-09-11 18:35:34

+0

@John:以此作为答案;丹可以接受它。 – trashgod 2010-09-11 19:55:49

回答

3

添加我以前的评论作为答案。您需要首先初始化比较器。

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); 

@了,方士,我猜他得到的类转换异常,而不是一个NPE,因为它试图投做(Comparator) null出于某种原因,多数民众赞成在失败之前,它实际上试图调用比较方法。没有堆栈跟踪,我不确定。

相关问题