如何创建GWT JsArray?

如何创建GWT JsArray?,gwt,gwt2,Gwt,Gwt2,我需要将T类型的值转换为JsArray 例如,我有String1、String2。。。。斯特林。我需要将这些字符串转换为JsArraystring 如何实现这一点?您没有太多选择:创建jsarraysting并添加到其中,或者使用JSNI。 JsArrayString arr=JavaScriptObject.createArray().cast(); arr.push(str1); arr.push(str2); arr.push(str3); 或 静态本机JsArrayString as

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

例如,我有String1、String2。。。。斯特林。我需要将这些字符串转换为
JsArray
string


如何实现这一点?

您没有太多选择:创建
jsarraysting
并添加到其中,或者使用JSNI。

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

静态本机JsArrayString asJsArray(字符串str1、字符串str2、字符串str3)/*-{
返回[str1,str2,str3];
}-*/;
显然,后者虽然速度更快,但无法扩展


这实际上取决于您需要做什么。

使用泛型,可以这样做:

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

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

    return array;
}
JsArray<String> arr = JsArrayUtils.readOnlyJsArray(new String[] { string1, string2 });
public JsArray createGenericArray(T…对象){
JsArray array=JavaScriptObject.createArray().cast();
对于(T对象:对象){
array.push(对象);
}
返回数组;
}

显然,
String
没有扩展
JavaScriptObject
。您需要有重载来说明基本类型。(或者,更不安全的是,您可以删除
T
的边界以允许任意类型。如果这样做,您需要更加小心。)

使用
JsArrayUtils
,如下所示:

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

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

    return array;
}
JsArray<String> arr = JsArrayUtils.readOnlyJsArray(new String[] { string1, string2 });
JsArray arr=JsArrayUtils.readOnlyJsArray(新字符串[]{string1,string2});
看看javadoc:

com.google.gwt.core.client.JsArrayUtils

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