1

Point2D.Float型のTreeSetを作成し、Point2D型のcompare()を実装するカスタムComparableクラスを使用して作成しています。ただし、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;
 }
}

何がうまくいかないかについてのアイデアはありますか?私はそれを無駄にデバッグしようとして何時間もここで立ち往生しています。ありがとう。

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、彼はNPEではなくクラスキャスト例外を取得していると思います。これは、キャストしようとしてい(Comparator) nullて、何らかの理由で、実際にcompareメソッドを呼び出そうとする前に失敗しているためです。スタックトレースがないと、よくわかりません。

于 2010-09-13T04:31:56.450 に答える