У меня есть проблема с instanceof Java. Вот разрыв кода, который вызывает меня проблема:
LinkedList<Double> currentSummary = summary.getFirst().getQuantiles();
... больше кода...
while (!currentSummary.isEmpty()){
if (currentSummary.getFirst() instanceof Double){
orderedSummary.add(new ComparableWrapper<Double, Float>(currentSummary.removeFirst(), currentEpsilon));
}
}
Так, моя проблема, что если-условие не станет верным. Те элементы в currentSummary
также null
или Double
- значение. И я пытаюсь отклонить элементы, которые являются null
. Сначала я просто добавил их и столкнулся NullPointerException
позже, из-за некоторых (но не все!) элемент быть null
. Элемент в качестве примера currentSummary
например, [пустой указатель, 0.09861866469135272, 10.137051035535745, 107.12083740100329, 371.4371264801424, 827.432799544501, 1206.251577083686].
Кто-либо got's идея, почему instanceof
не будет работать в этом случае? Я попробовал его currentSummary.getFirst() instanceof Object
также...
Заранее спасибо!
Я предполагаю, что вы хотите удалять первую запись на каждой итерации, чтобы обойти весь список. Однако вы удаляете запись только тогда, когда условие instanceof истинно. Поэтому кажется, что цикл становится бесконечным, когда встречает первое нулевое значение (если только вы не опустили часть кода, и мы не видим полное тело цикла)
. Возможно ли, что из-за автоматической упаковки / распаковки объекты Double распаковываются в примитив double
, и поэтому они не являются экземпляром класса Двухместный
.
Если это так, не лучше ли вы вместо этого проверять ненулевые элементы?
Почему бы вам просто не использовать простую нулевую проверку?
if (currentSummary.getFirst() != null){ ... }
Можно, используя необработанные типы ( LinkedList
вместо LinkedList
), добавить записи, отличные от Double
, в ваш LinkedList
. Эти элементы не пройдут тест instanceof Double
. Но эти записи пройдут тест instanceof Object
.