Что означает сообщение об ошибке «Использование не входящего метода итератора: Array.iterator ()»? - PullRequest
0 голосов
/ 08 мая 2018

Это мой первый проект в 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 голосов
/ 08 мая 2018

Как сказано в документации :

Обратите внимание, что один и тот же экземпляр итератора возвращается при каждом вызове этого метода.

Итак, если вы вызываете это из двух разных потоков, вызов next в одном потоке продвинет итератор в другом потоке.

(Или, вызовите его дважды в одном и том же потоке, и вызов следующего в одном экземпляре улучшит и другой экземпляр. По сути, речь идет не о потоках).

Используйте конструктор Array.ArrayIterator для вложенных и многопоточных итераций.

Используйте new Array.ArrayIterator<>(items) вместо просто items.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...