“使用非重入迭代器方法:Array.iterator()”错误消息是什么意思?

时间:2018-05-08 15:33:40

标签: java android libgdx reentrancy arrayiterator

这是我在libGDX的第一个项目,我正在尝试循环com.badlogic.gdx.utils.Array

//properties
...
private Array<Item> items;
...
//constructor
...
    items = new Array<Item>();
...
//render method
...
    for (Item item : items) {
        item.update(deltaTime);
    }
...

Android工作室突出显示items并在悬停时显示消息:

  

使用非重入迭代器方法:Array.iterator()

     

LibGDX集合上的迭代器方法每次都返回相同的迭代器实例   方法被调用。对于嵌套或多线程迭代,创建一个新的   迭代器使用适当的构造函数

我不知道如何解决这个问题,或者这只是一种通知类型的错误,以及从长远来看它是否会影响任何事情。

任何想法是什么以及如何解决它?

1 个答案:

答案 0 :(得分:3)

就像它说in the documentation

  

请注意,每次调用此方法时都会返回相同的迭代器实例。

所以,如果你从两个不同的线程调用它,在一个线程中调用next会在另一个线程中推进迭代器。

(或者,在同一个线程中调用它两次,在一个实例上调用next也会推进另一个实例。这不是关于线程本身。)

  

使用Array.ArrayIterator构造函数进行嵌套或多线程迭代。

使用new Array.ArrayIterator<>(items)代替items