Двойной/Объектный instanceof не будет работать :(

У меня есть проблема с 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 также...

Заранее спасибо!

1
задан mkko 3 July 2010 в 08:22
поделиться

4 ответа

Я предполагаю, что вы хотите удалять первую запись на каждой итерации, чтобы обойти весь список. Однако вы удаляете запись только тогда, когда условие instanceof истинно. Поэтому кажется, что цикл становится бесконечным, когда встречает первое нулевое значение (если только вы не опустили часть кода, и мы не видим полное тело цикла)

.
2
ответ дан 2 September 2019 в 23:19
поделиться

Возможно ли, что из-за автоматической упаковки / распаковки объекты Double распаковываются в примитив double , и поэтому они не являются экземпляром класса Двухместный .

Если это так, не лучше ли вы вместо этого проверять ненулевые элементы?

0
ответ дан 2 September 2019 в 23:19
поделиться

Почему бы вам просто не использовать простую нулевую проверку?

if (currentSummary.getFirst() != null){ ... }
0
ответ дан 2 September 2019 в 23:19
поделиться

Можно, используя необработанные типы ( LinkedList вместо LinkedList ), добавить записи, отличные от Double , в ваш LinkedList . Эти элементы не пройдут тест instanceof Double . Но эти записи пройдут тест instanceof Object .

0
ответ дан 2 September 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: