Java 与jdk indexOf()相比,GWT仿真indexOf()不正确

Java 与jdk indexOf()相比,GWT仿真indexOf()不正确,java,arraylist,gwt,Java,Arraylist,Gwt,出于某种原因,GWT仿真(客户端)jdk方法indexOf()无法按预期工作 示例: 我有一个包含3个NaN对象的列表: List<Double> doubleList = new ArrayList<Double>(); doubleList.add(Double.NaN); doubleList.add(Double.NaN); doubleList.add(Double.NaN); 到目前为止,客户端和服务器端的一切都正常工作 现在我正在尝试获取minValue的

出于某种原因,GWT仿真(客户端)jdk方法indexOf()无法按预期工作

示例:

我有一个包含3个NaN对象的列表:

List<Double> doubleList = new ArrayList<Double>();
doubleList.add(Double.NaN);
doubleList.add(Double.NaN);
doubleList.add(Double.NaN);
到目前为止,客户端和服务器端的一切都正常工作

现在我正在尝试获取minValue的索引:

Integer index = doubleList.indexOf(minValue);
这就是乐趣的开始。服务器端(简单单元测试)jdk ArrayList类方法indexof()返回它应该返回的
0
。而仿真ArrayList类(客户端)返回的
-1
不正确,因为在列表中找不到值时应返回
-1
,而列表中的值显然不是这种情况

你知道为什么会这样吗

GWT indexOf():

int indexOf(对象o,int索引){
对于(;索引

GWT模拟了

,但在Java中,Double.NaN.equals(Double.NaN)
是真的。因此方法
indexOf()
中的比较对NaN不起作用。在这种情况下,正确的实现将使用JavaScript函数
isNaN()

但是在Java
Double.NaN.equals(Double.NaN)
是正确的。因此方法
indexOf()
中的比较对NaN不起作用。在这种情况下,正确的实现将使用JavaScript函数
isNaN()

整数或长列表是否存在相同的问题?@vanje没有测试整数/Long,但我认为不会有任何区别。请注意,这仅适用于NaN对象。整型列表或长列表是否存在相同的问题?@vanje尚未测试整型/长型,但我认为不会有任何差异。请注意,这仅适用于NaN对象。这是有道理的,尽管我怀疑方法indexOf()是否已从2.7.0版本更改为2.8.2版本,并且NaN比较适用于2.7.0版本(现在查找2.7.0 indexOf仿真),但查看这两个版本的编译JavaScript代码会很有趣。不幸的是,我没有时间做这些事情。你们中的一个人能在github.com/gwtproject/gwt/issues上提交这个文件以便解决问题吗?@ColinAlworth在github上注册了这个文件。这是有道理的,尽管我怀疑indexOf()方法是否从2.7.0版本更改为2.8.2版本,并且NaN比较可以在2.7.0版本下工作(现在查找2.7.0 indexOf emulation)查看这两个版本的已编译JavaScript代码会很有趣。不幸的是,我没有时间做这些事情。你们中的一位可以在github.com/gwtproject/gwt/issues上提交此文件以便解决问题吗?@ColinAlworth在github注册了此文件。
Integer index = doubleList.indexOf(minValue);
  int indexOf(Object o, int index) {
    for (; index < array.length; ++index) {
      if (Objects.equals(o, array[index])) {
        return index;
      }
    }
    return -1;
  }