我的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
中的这些元素可以是null
或Double
- 值。我试图拒绝null
的元素。起初我刚添加它们并稍后进入NullPointerException
,因为有些(但不是全部!)元素是null
。
currentSummary
的示例元素是例如[null,0.09861866469135272,10.137051035535745,107.12083740100329,371.4371264801424,827.432799544501,1206.251577083686]。
任何人都知道为什么instanceof
在这种情况下不起作用?我也尝试了currentSummary.getFirst() instanceof Object
......
提前致谢!
答案 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
测试。