【发布时间】:2021-06-01 11:25:19
【问题描述】:
在下面的 sn-p 中,[1] 似乎产生了预期的结果,而 [2] 抛出了 ClassCastException,如下面的结果所示。
为什么在调用 iterator() 时会抛出 ClassCastException 而不是在使用方法引用时?
List<String> philosophers = Arrays.asList("Seneca", "Epictetus");
// [1]
for (String s : (Iterable<? extends String>) philosophers::iterator) {
System.out.println(s);
}
// [2]
for (String s: (Iterable<? extends String>) philosophers.iterator()) {
System.out.println(s);
}
[1](使用方法引用时的结果)
`Seneca`
`Epictetus`
[2](调用iterator()时的结果)
Exception in thread "main" java.lang.ClassCastException: class java.util.Arrays$ArrayItr cannot be cast to class java.lang.Iterable`
【问题讨论】: