在下面的循环中,marker
是一个迭代列表,每个项目都绘制在 Canvas 上。然而,随着循环的进行,我相信以前的引用被破坏了。如何为每次循环运行创建一个唯一的实例?
//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.
最佳答案
这不是问题。
您没有创建新的Marker
对象,只是从可迭代的Collection
中读取它。原始集合(可能还有其他对象)包含对您正在循环的对象的引用,因此它们不会被销毁。
您的第二个代码仅在循环开始时检查 iter.hasPrevious()
,但它正在执行许多操作。如果 Collection
/iterator 中没有足够的元素,那么当尝试访问不存在的元素时(例如,执行 iter.previous()
在 iter
到达第一个元素之后)。
关于java - While 循环而不破坏先前的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238497/