Почему я не могу набрать приведение с (Point2d.Double)? - Джава - PullRequest
2 голосов
/ 18 сентября 2011

У меня есть фрагмент кода ниже - который не работает .

private void startAddingTrackPointValue()
    {
        Set<Point2D.Double> keySet = this.trackPointList.keySet();
        Point2D.Double[] keys = (Point2D.Double[]) keySet.toArray();
        for(int i = 0; i < keys.length; i++)
        {
            System.out.println(keys[i]);
        }
    }

, который генерирует исключение , Это ...

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.awt.geom.Point2D$Double;
    at SegmentFactory.startAddingTrackPointValue(SegmentFactory.java:170)
    at SegmentFactory.<init>(SegmentFactory.java:44)
    at TestClass.main(TestClass.java:8)

Но это отлично работает , Если я так делаю,

private void startAddingTrackPointValue()
    {
        Set<Point2D.Double> keySet = this.trackPointList.keySet();
        Object[] keys = (Object[]) keySet.toArray();
        for(int i = 0; i < keys.length; i++)
        {
            System.out.println(keys[i]);
        }
    }

Вопрос в том, почему я не могу набрать с Point2D.Double []?

Ответы [ 2 ]

3 голосов
/ 18 сентября 2011

потому что "Object []" не является экземпляром "Point2D.Double []".

ни один из них не будет работать:

Point2D.Double[] = (Point2D.Double[])new Object[0]; // this is essentially what your code is doing
Point2D.Double = (Point2D.Double)new Object();

сделать это вместо:

Point2D.Double[] keys = (Point2D.Double[]) keySet.toArray(new Point2D.Double[keySet.size()]);
1 голос
/ 18 сентября 2011

Передать типизированный массив в toArray():

Point2D.Double[] keys = keySet.toArray(new Point2D.Double[keySet.size()]);
...