出于某种原因,GWT模拟(客户端)jdk方法indexOf()没有按预期工作。
示例:
我有一个包含3个NaN对象的列表:
List<Double> doubleList = new ArrayList<Double>();
doubleList.add(Double.NaN);
doubleList.add(Double.NaN);
doubleList.add(Double.NaN);
我检索最小值,即Double.NaN:
Double minValue = Collections.min(doubleList); //minValue = Double.NaN
到目前为止,一切都在客户端和服务器端按预期工作。
现在我正在尝试获取minValue的索引:
Integer index = doubleList.indexOf(minValue);
这就是乐趣的开始。服务器端(简单单元测试)jdk ArrayList类方法indexof()返回0
,应该如此。虽然模拟的ArrayList类(客户端)返回-1
这是不正确的,因为在列表中找不到值时应返回-1
,显然不是这种情况。
任何想法为什么会发生这种情况?
GWT indexOf():
int indexOf(Object o, int index) {
for (; index < array.length; ++index) {
if (Objects.equals(o, array[index])) {
return index;
}
}
return -1;
}
GWT模仿class ArrayList
答案 0 :(得分:0)
In JavaScript NaN === NaN
is false但在Java Double.NaN.equals(Double.NaN)
中是正确的。因此,方法indexOf()
中的比较对NaN不起作用。在这种情况下,正确的实现将使用JavaScript函数isNaN()
。