0

UIではなく、GWTとオーバーレイ、JavaScriptオーバーレイタイプを使用して、JSON入力のdoubleの配列を読み取り、Highchartsに送信しています。データポイントがnullでない限り、以下は正常に機能します。

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

ただし、null は Highcharts の欠損値を表します。残念ながら、どのインデックスが null であるかを知る方法はありません。get() メソッドは HostedModeException をスローし、

double 以外の何かが JSNI メソッド '@com.google.gwt.core.client.JsArrayNumber::get(I)' から返されました: 未定義の型の JS 値、期待される double

興味深いことに、私自身が null を生成することがありますが、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).

null 値を照会することはできませんが、それらを生成することはできます。これには正当な理由があると確信しており、私はGWTに非常に慣れていません。

一部のエントリが null である可能性がある場合に、オーバーレイを使用して double 値の配列を読み取る適切な方法は何でしょうか?

(今のところ、自分で確認できるように別の関数 isNull(index) を追加しました)。

4

1 に答える 1

1

Java では、doubleは値型であり、null を含めることはできませんが、JavaScript では、すべてを として参照するため、型はもう少し柔軟に管理されますvar。のようなイベントnull + nullは正当です。JavaScript は型を意味のあるものに強制するからです。

オブジェクト型java.lang.Doubleには null 値を割り当てることができますが、JSNI メソッドは を返すことができませんDoubleisNullチェックはおそらく最善の方法ですが、null をチェックするメソッドを追加することを検討してください。Doubleそれ以外の場合は、実際の値を返します。

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 に答える