虽然循环没有破坏以前的参考

时间:2012-11-05 18:56:04

标签: java android while-loop

在以下循环中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. 

1 个答案:

答案 0 :(得分:1)

这不是问题。

您不是在创建新的Marker对象,只是从可迭代的Collection中读取它。原始集合(可能还有其他对象)包含对您循环的对象的引用,因此它们不会被销毁。

您的第二个代码仅在循环开始时检查iter.hasPrevious(),但它正在执行许多操作。如果Collection /迭代器中没有足够的元素,那么在尝试寻找不存在的元素时会遇到该异常(例如,在iter.previous()到达后执行iter第一个元素)。