如何创建GWT JsArray?

时间:2012-06-17 07:50:17

标签: gwt gwt2

我需要将类型T的值转换为JsArray。

eg. I have String1, String2 .... Stringn
I need to convert those String into JsArray<String>

任何人都可以帮助我吗?

提前致谢, Gnik

3 个答案:

答案 0 :(得分:21)

您没有太多选择:创建JsArrayString并添加或使用JSNI。

JsArrayString arr = JavaScriptObject.createArray().cast();
arr.push(str1);
arr.push(str2);
arr.push(str3);

static native JsArrayString asJsArray(String str1, String str2, String str3) /*-{
  return [str1, str2, str3];
}-*/;

显然,后者不会扩展,而是更快。

这取决于你究竟需要做什么。

答案 1 :(得分:4)

像这样使用JsArrayUtils

JsArray<String> arr = JsArrayUtils.readOnlyJsArray(new String[] { string1, string2 });

看看javadoc:

  

<强> com.google.gwt.core.client.JsArrayUtils

     

用于操作JS数组的实用程序类。这些方法没有开启   其他JavaScriptObject子类,例如JsArray,因为添加了新的   方法可能会破坏现有的子类型。

答案 2 :(得分:1)

使用泛型,可以这样做:

public <T extends JavaScriptObject> JsArray<T> createGenericArray(T... objects) {
    JsArray<T> array = JavaScriptObject.createArray().cast();

    for (T object : objects) {
        array.push(object);
    }

    return array;
}

显然,String不会延伸JavaScriptObject。你需要有重载来解释原始类型。 (或者,不太安全,您可以删除T的边界以允许任意类型。如果您这样做,则需要更加小心。)