2011-09-18 8 views
2

私は以下のコードスニペットを持っています - は動作しません。私はこのようにそれを行う場合(Point2d.Double)でキャストを入力できないのはなぜですか? - Java

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 []で型キャストできないのですか?

答えて

1

toArray()に型指定された配列を渡します。

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

funny java :)、ありがとうジョーイ – doNotCheckMyBlog

3

"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()]); 
+0

が部分的に正しい、しかし "新" はキーワードであります.toArray引数で必須です。ありがとう – doNotCheckMyBlog

+0

@SkeetOverFlow - 申し訳ありませんが、私は速く入力していました。 – jtahlborn

+0

心配なし! – doNotCheckMyBlog

関連する問題