Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我不能用(Point2d.Double)键入castJAVA_Java_Casting_Classcastexception - Fatal编程技术网

为什么我不能用(Point2d.Double)键入castJAVA

为什么我不能用(Point2d.Double)键入castJAVA,java,casting,classcastexception,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

我有下面的代码片段-它不起作用

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]);
        }
    }
private void startAddingTrackPointValue()
{
Set keySet=this.trackPointList.keySet();
Point2D.Double[]keys=(Point2D.Double[])keySet.toArray();
for(int i=0;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)
线程“main”java.lang.ClassCastException:[Ljava.lang.Object;中的异常不能转换为[Ljava.awt.geom.Point2D$Double; 在SegmentFactory.startAddingTrackPointValue(SegmentFactory.java:170)处 在SegmentFactory。(SegmentFactory.java:44) 位于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]);
        }
    }
private void startAddingTrackPointValue()
{
Set keySet=this.trackPointList.keySet();
Object[]keys=(Object[])keySet.toArray();
for(int i=0;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()]);

将键入的数组传递给
toArray()


部分正确,但是.toArray参数()中需要“new”关键字。Thanks@SkeetOverFlow-对不起,我打字太快了。一个方便的构造函数会很好。
Point2D.Double[] keys = keySet.toArray(new Point2D.Double[keySet.size()]);