instanceof Double / Object不起作用:(

时间:2010-07-03 08:22:11

标签: java instanceof

我的java的instanceof有问题。这是导致我麻烦的代码差距:

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中的这些元素可以是nullDouble - 值。我试图拒绝null的元素。起初我刚添加它们并稍后进入NullPointerException,因为有些(但不是全部!)元素是nullcurrentSummary的示例元素是例如[null,0.09861866469135272,10.137051035535745,107.12083740100329,371.4371264801424,827.432799544501,1206.251577083686]。

任何人都知道为什么instanceof在这种情况下不起作用?我也尝试了currentSummary.getFirst() instanceof Object ......

提前致谢!

4 个答案:

答案 0 :(得分:2)

我假设您想要在每次迭代时删除第一个条目,以便遍历完整列表。但是,仅当instanceof condition为true时才删除条目。因此,当遇到第一个空值时,似乎循环变为无限(除非你删除了部分代码,我们没有看到完整的循环体)

答案 1 :(得分:0)

是否有可能由于auto-boxing/unboxing,Double对象被取消装箱到原始double,因此它们不是Double类的实例。

如果是这种情况,那么改为检查非空元素会更好吗?

答案 2 :(得分:0)

为什么不使用简单的空检查?

if (currentSummary.getFirst() != null){ ... }

答案 3 :(得分:0)

通过使用原始类型(LinkedList代替LinkedList<Double>),可以向您的Double添加非LinkedList<Double>条目。这些元素将无法通过instanceof Double测试。但这些条目将通过instanceof Object测试。