0

次のループ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);
        }

私は以下を試しましたが、役に立ちませんでした。ループは2番目の項目に到達し、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. 
4

1 に答える 1

1

それは問題ではありません。

新しいMarkerオブジェクトを作成するのではなく、 iterable から読み取るだけCollectionです。元のコレクション (およびおそらく他のオブジェクト) には、ループしているオブジェクトへの参照が含まれているため、それらは破棄されません。

2 番目のコードiter.hasPrevious()は、ループの開始時にのみチェックしますが、多くの操作を実行しています。/iterator に十分な要素がない場合、Collection存在しない要素に到達しようとすると (たとえば、最初の要素に到達したiter.previous()後に実行すると)、その例外が発生します。iter

于 2012-11-05T19:02:04.153 に答える