在练习中,我们必须在循环中用另一个对象替换一个对象。我的解决方案是使用“ListIterator”。但是一位同事尝试使用 foreach 语法并播放参考,但此解决方案不起作用。
// This doesn't work
for ( Growable growable : growables ) {
growable = growable.grow(); // Return another object (seed -> sprout, ..)
}
// But that well
for (final ListIterator<Growable> it = growables.listIterator(); it.hasNext();) {
it.set(it.next().grow());
}
从文档 [1] 中,我可以读到 foreach 不适合替换,因为我们没有对迭代器的引用。
程序需要访问迭代器才能删除当前元素。for-each 循环隐藏了迭代器,因此您不能调用 remove。因此,for-each 循环不可用于过滤。同样,它不适用于在遍历时需要替换列表或数组中的元素的循环。
但是我们有一个对迭代对象的引用。我错了吗 ?有人可以解释一下为什么“foreach”解决方案不起作用吗?
谢谢
[1] http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html