instanceof Double / Object не будет работать :( - PullRequest
1 голос
/ 03 июля 2010

У меня проблема с 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));
        }
}

Итак, моя проблема в том, что условие if не станет истинным. Эти элементы в currentSummary имеют либо null, либо Double -значение. И я пытаюсь отклонить элементы, которые null. Сначала я просто добавил их и позже столкнулся с NullPointerException, поскольку некоторые (но не все!) Элементы были null. Примером элемента currentSummary является, например, [null, 0.09861866469135272, 10.137051035535745, 107.12083740100329, 371.4371264801424, 827.432799544501, 1206.251577083686].

У кого-нибудь есть идея, почему instanceof не будет работать в этом случае? Я тоже попробовал с currentSummary.getFirst() instanceof Object ...

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

Ответы [ 4 ]

2 голосов
/ 03 июля 2010

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

0 голосов
/ 03 июля 2010

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

0 голосов
/ 03 июля 2010

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

if (currentSummary.getFirst() != null){ ... }
0 голосов
/ 03 июля 2010

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

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

...