在以下循环中marker
是一个迭代的列表,每个项目都在画布上绘制。然而,随着循环的进行,我相信以前的引用被破坏了。如何为每次循环运行创建一个唯一的实例?
//Draw AR markers in reverse order since the last drawn should be the closest
ListIterator<Marker> iter = collection.listIterator(collection.size());
while (iter.hasPrevious()) {
Marker marker = iter.previous();
marker.draw(canvas);
}
我尝试过以下但无济于事。循环到达第二个项目然后有一个NoSuchElementException。
while (iter.hasPrevious()) {
int i = 0;
try {
Marker marker = iter.previous();
marker.draw(canvas);
++i;
System.out.println("Item number 1 " + i);
Marker marker1 = iter.next();
marker1.draw(canvas);
++i;
... repeated up to marker7 then catching the NoSuchElementException.
答案 0 :(得分:1)
这不是问题。
您不是在创建新的Marker
对象,只是从可迭代的Collection
中读取它。原始集合(可能还有其他对象)包含对您循环的对象的引用,因此它们不会被销毁。
您的第二个代码仅在循环开始时检查iter.hasPrevious()
,但它正在执行许多操作。如果Collection
/迭代器中没有足够的元素,那么在尝试寻找不存在的元素时会遇到该异常(例如,在iter.previous()
到达后执行iter
第一个元素)。