下一个代码中类强制转换异常的确切原因是什么?

时间:2012-07-13 12:50:13

标签: java classcastexception

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;
    }
}

我粗略估计会发生什么(编译器生成的迭代器包含显式转换),但是想要一些好的答案,谢谢。

2 个答案:

答案 0 :(得分:1)

当我使用Java 7运行它时,我没有得到ClassCastException,也不期望它,因为对象在main()中被转换为Object;

答案 1 :(得分:0)

嗯,我认为这是因为在封面下java编译器会生成这样的smth:

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

并且显式转换会给出错误。 一般来说,这是将泛型与原始类型混合的问题,但正如我已经说过的,我不会在这里谈论最佳实践。