1

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));
        }
}

所以,我的问题是,如果条件不会变为真。中的那些元素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

4 回答 4

2

我假设您想在每次迭代中删除第一个条目,以便遍历完整列表。但是,只有在 instanceof 条件为真时才删除该条目。因此,当遇到第一个空值时,循环似乎变得无限(除非您删除了部分代码,并且我们看不到完整的循环体)

于 2010-07-03T08:40:24.457 回答
0

是否有可能由于auto-boxing/unboxing, Double 对象被 unboxed 到 primitive double,因此它们不是Double类的实例。

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

于 2010-07-03T08:28:35.467 回答
0

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

if (currentSummary.getFirst() != null){ ... }
于 2010-07-03T08:30:08.937 回答
0

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

于 2010-07-03T09:18:18.003 回答