2011-09-18 33 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

有趣的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

相關問題