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 :(得分:1)
当我使用Java 7运行它时,我没有得到ClassCastException,也不期望它,因为对象在main()中被转换为Object
;
答案 1 :(得分:0)
嗯,我认为这是因为在封面下java编译器会生成这样的smth:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println((Object[])iterator.next());
}
并且显式转换会给出错误。 一般来说,这是将泛型与原始类型混合的问题,但正如我已经说过的,我不会在这里谈论最佳实践。