2012-07-13 85 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;

相关问题