java - 为什么我无法使用 (Point2d.Double) 键入强制转换? - java

标签 java casting classcastexception

我有以下代码片段 - 不起作用

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[] 进行类型转换?

最佳答案

因为“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()]);

关于java - 为什么我无法使用 (Point2d.Double) 键入强制转换? - java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458805/

相关文章:

java - 列表实现中的 ClassCastException?

java - 更改自定义组件 JTable 的 LookAndFeel

Java验证类和异常

java - 自动检测中默认的数据源实现是什么

java - 静态文件的 Maven 模块

c++ - 如何将基类指针转换为派生类的指针? C++

python - 是否有用于向下转换的 python 习语?

java - Android java.lang.ClassCastException : android. widget.RelativeLayout 无法转换为 android.widget.EditText

java - 解析JSONObject时如何制作容错代码?

c# - 将对象转换为相同类型以及对性能的影响