我有一个String的Java数组,现在我想将其传递给JSNI函数。我尝试在GWT中使用JsArrayString,但是我发现它不能直接初始化,因为它没有可见的构造函数。那么,如何将String数组传递给JSNI函数,并在JavaScript代码中使用它呢?代码如下所示:

public void callJSNI() {
    String[] stringArray = xxx;

    //How should I convert the array into a JSNI-readable format here?
}

private native void JSNIMethod(JsArrayString array) /*-{
    //some code to use the array in javascript
}-*/

最佳答案

API没有提供简便的方法,您必须创建一个实用程序方法,该方法将:

  • 创建一个新的JSNI数组
  • 遍历Java数组的参数并填充JSNI数组

  • 像这样:

    public static JsArrayString toJsArray(String[] input) {
        JsArrayString jsArrayString = createEmptyJsArrayString();
        for (String s : input) {
            jsArrayString.push(s);
        }
        return jsArrayString;
    }
    
    private static native JsArrayString createEmptyJsArrayString() /*-{
        return [];
    }-*/;
    

    正如OP所建议的,我们当然可以跳过本机初始化并使用JsArrayString.createArray()

    现在我们可以摆脱本机初始化,因此我们的代码简化为:

    public static JsArrayString toJsArray(String[] input) {
    JsArrayString jsArrayString = JsArrayString.createArray().cast();
        for (String s : input) {
            jsArrayString.push(s);
        }
        return jsArrayString;
    }
    

    10-08 03:28