与 jdk indexOf() 相比,GWT 模拟的 indexOf() 不正确
GWT emulated indexOf() is incorrect compared to jdk indexOf()
出于某种原因,模拟的 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 class 方法 indexof() returns 0
,这是应该的。虽然模拟 ArrayList class(客户端)returns -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
In JavaScript NaN === NaN
is false 但在 Java Double.NaN.equals(Double.NaN)
中是正确的。所以方法 indexOf()
中的比较不适用于 NaN。在这种情况下,正确的实现将使用 Java 脚本函数 isNaN()
。
出于某种原因,模拟的 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 class 方法 indexof() returns 0
,这是应该的。虽然模拟 ArrayList class(客户端)returns -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
In JavaScript NaN === NaN
is false 但在 Java Double.NaN.equals(Double.NaN)
中是正确的。所以方法 indexOf()
中的比较不适用于 NaN。在这种情况下,正确的实现将使用 Java 脚本函数 isNaN()
。