2012-07-13 84 views
0
public class Main { 
    public static void main(String[] args) { 
     List<Object[]> list = getIt(); 

//  unsuccessful iteration, throws ClassCastException 
     for (Object id : list) { 
      System.out.println(id); 
     } 

//  successful iteration 
     Iterator iterator = list.iterator(); 
     while (iterator.hasNext()) { 
      System.out.println(iterator.next()); 
     } 
    } 

    private static List<Object[]> getIt() { 
     List list = new ArrayList(); 
     list.add(1L); 
     return list; 
    } 
} 

我理解粗略估計會發生什麼(由編譯器生成的迭代器包含顯式強制轉換),但想要一些很好的答案,謝謝。下一個代碼中類拋出異常的確切原因是什麼?

+0

這只是該語言的一個功能。你還在尋找什麼? – Lion 2012-07-13 12:54:36

+2

它在Eclipse上編譯和執行時沒有問題。向我們展示堆棧跟蹤以及您正在使用的Java版本。 – npe 2012-07-13 12:54:39

+0

我沒有運行您的代碼的任何異常。 – Keppil 2012-07-13 12:54:57

回答

0

嗯,我認爲這是因爲蓋下的Java編譯器生成這樣的水木清華:

Iterator iterator = list.iterator(); 
     while (iterator.hasNext()) { 
      System.out.println((Object[])iterator.next()); 
     } 

和明確的投給出了錯誤。 一般來說,這是將泛型與原始類型混合的問題,但正如我已經說過的,在這裏我不會談論最佳實踐。

1

當我用Java 7運行這個時,我沒有得到一個ClassCastException異常,我也不會期望它,因爲該對象在main()中投影爲Object;

相關問題