gpt4 book ai didi

java - AutoBean、数组/列表属性和 JSNI

转载 作者:行者123 更新时间:2023-12-02 00:21:33 25 4
gpt4 key购买 nike

我在 Autobeans 的上下文中不知何故与数组和 JSNI 作斗争。
在我的一个 GWT 项目中,我使用 JSON 从后端检索数据。
在客户端检索数据后,我想使用自定义可视化小部件(用 javascript 开发)对其进行可视化。

以下是组件:

JSON 结构:

{'ids':[1,2,3,4],'data':[[1.0],[1.0,2.0],[1.0,2.0,3.0] ... ]}

基本上,我的 json 负载中有两个数据集。 ids 是一个整数数组 (int[]),data 是一个 float 组数组 (float[][] )

当然有不同的方法来解析客户端上的数据。我决定使用 AutoBeans。所以我为我的 json 结构定义了一个接口(interface)。

AutoBean:

interface MyData {
List<Integer> ids;
List<List<Float>> data;
}

解析数据工作正常。

我的自定义可视化小部件有一个 API 函数来设置数据,如下所示:

function api_setData(ids,data) {
//ids should be an Array of Ints
//data should be an array of array of Floats.
}

问题是,对于 JSNI,我无法使用普通的 Java 数组。我必须使用JsArray

public final native void setData(JsArrayInteger ids,JsArray<JsArrayInteger> data /*-{
this.api_setData(ids,data);
}-*/;

所以我必须将 AutoBean 属性(dataids)转换为 JsArray 实例。有更好/更好的方法吗?

或者也许我应该使用 JSONParser 而不是 AutoBeans这样效率更高吗?

最佳答案

如果您必须处理 JSNI,而且您仅在客户端使用 MyData 接口(interface),那么就不要使用 AutoBeans。请改用 JSON 覆盖:

public class MyData extends JavaScriptObject {
protected MyData() { /* required for JSOs */ }

public final native JsArrayInteger getIds() /*-{ return this.ids; }-*/;

public final native JsArray<JsArrayNumber> getData() /*-{ return this.data; }-*/;
}

然后解析您的 JSON:

MyData data = JsonUtils.safeEval(jsonStr);
customVisualizationWidget.setData(data.getIds(), data.getData());
<小时/>

或者,假设您只需要为 setData 解析数据,则只需使用 JavaScriptObject

在您的小部件中:

public final native void setData(JavaScriptObject obj) /*-{
this.api_setData(obj.ids, obj.data);
}-*/;

当您需要解析 JSON 并将其提供给小部件时:

customVisualizationWidget.setData(JsonUtils.safeParse(jsonStr));

关于java - AutoBean、数组/列表属性和 JSNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com