0

我正在使用 GWT 和覆盖、JavaScript 覆盖类型(而不是 UI)来读取 JSON 输入中的双精度数组并将其发送到 Highcharts。只要没有数据点为空,以下就可以正常工作。

public final native JsArrayNumber getPoints() /*-{
    return this.points;
}-*/;

但是,null 表示 Highcharts 中的缺失值。不幸的是,没有办法知道哪个索引为空,get() 方法将抛出 HostedModeException 说明

从 JSNI 方法“@com.google.gwt.core.client.JsArrayNumber::get(I)”返回了非双精度值:未定义类型的 JS 值,预期双精度

有趣的是,我自己可能会产生空值,而 toString() 方法工作得很好。

JsArrayNumber test = jsSeries.getPoints();
test.set(test.length()+2, 24.2);
System.out.println(test.toString());
System.out.println(test.length());
for (int i = 0; i < test.length(); i++) {
    System.out.println(test.get(i));            
}

Output:
163,1,276,0,547,0,628,,,24.2
10
163.0
1.0
276.0
0.0
547.0
0.0
628.0
(and here comes the exception at the first null entry).

令我感到奇怪的是,我无法查询空值,但我能够生成它们。我确信这是有正当理由的,而且我对 GWT 很陌生。

当某些条目可能为空时,使用覆盖来读取双值数组的适当方法是什么?

(现在我刚刚添加了另一个函数 isNull(index) 以便我可以自己检查)。

4

1 回答 1

1

在 Java 中,double是一种值类型,不能包含 null,而在 JavaScript 中,类型的管理更加灵活,因为您将所有内容都称为var. 诸如此类的事件null + null是合法的,因为 JavaScript 会强制类型使其有意义。

对象类型java.lang.Double可以分配一个空值,但 JSNI 方法不能返回Double。您的isNull检查可能是最好的方法,但您可能会考虑添加一个Double检查 null 的方法,否则返回实际值:

public Double getWithNull(int i) {
  if (isNull(i)) {
    return null;
  } else {
    return get(i);
  }
}

https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#passing-javascript讨论了可以从 JSNI 返回的类型。

于 2012-05-18T17:44:58.737 回答