Мне нужно перебирать FastMap.values. Моя проблема заключается в том, что основной цикл при сбое NullPointerExceptionИсключительное исключение указателя - повторение значений FastMap
основной петли
Collection<Order> orders = myObject.getOpenOrders();
for (Order order : orders) {
}
Проблема в том, что другой поток в моей системе редактирует fastmap Это добавление и удаление элементов к нему, и я получаю NullPointerException. Редко, но это нужно решить.
Так я добавил Null чек
Collection<Order> orders = myObject.getOpenOrders();
for (Order order : orders) {
if (order != null)
}
и до сих пор я получаю NullPointerExcetion Так что я попытался перебирать его следующим образом
FastMap<String, Order> openOrders = myObject.getOpenOrdersMap();
for (FastMap.Entry<String, Order> e = openOrders.head(), end = openOrders.tail(); (e = e.getNext()) != end && e != null;) {
Order order = e.getValue();
}
Но тогда цикл останавливается, когда он получает нулевое значение, а не бросать NullPointerExcetion. И это тоже проблема, так как мне нужно итерировать все элементы.
Я предполагаю, что проблема заключается в том, что для итерации используются значения(), и на самом деле это указатель на список. Я попытался скопировать список, но затем я также получаю NullPointerExcetion в процессе копирования. любые погрешности
BTW: Я знаю, что изменение всей конструкции - лучшее решение и использование замков в каждой вставке и чтении. но есть ли какие-то небольшие изменения, которые я могу сделать, чтобы решить мою проблему?
Любая идея?
Javolution 'FastMap'? IIRC, Javolution делали всевозможные дикие претензии, но реализация была явно неправильной. Если вам действительно нужны параллельные коллекции, я предлагаю 'java.util.concurrent'./'NullPointerException' должен содержать сведения о том, где он был запущен. –