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

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

4

2 回答 2

1

当我使用 Java 7 运行它时,我没有收到 ClassCastException,我也不希望它像Objectmain() 中那样转换对象;

于 2012-07-13T12:55:02.990 回答
0

好吧,我认为这是因为在掩护下,java编译器会像这样生成smth:

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

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

于 2012-07-13T14:22:59.117 回答