2012-06-17 12 views
9

Ich muss Werte des Typs T in JsArray konvertieren.Wie erstellt man GWT JsArray?

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

Kann mir jemand helfen?

Vielen Dank im Voraus, Gnik

Antwort

20

Man braucht nicht viele Möglichkeiten: ein JsArrayString und das Hinzufügen, um es zu schaffen, oder JSNI verwenden.

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

oder

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

Offensichtlich ist, dass dieser nicht skaliert, während schneller zu sein.

Es hängt wirklich davon ab, was genau Sie tun müssen.

1

Generika verwenden, könnte es wie folgt tun:

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

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

    return array; 
} 

Offensichtlich ist, dass String nicht JavaScriptObject verlängern. Sie müssten Überladungen haben, um primitive Typen zu berücksichtigen. (Oder, weniger sicher, könnten Sie die Grenzen T entfernen für beliebige Arten, damit Sie benötigen würde viel vorsichtiger sein, wenn Sie dies tun sollten..)

4

Verwenden JsArrayUtils wie folgt aus:

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

Werfen Sie einen Blick auf die javadoc:

com.google.gwt.core.client.JsArrayUtils

Utility-Klasse für die Manipulation JS-Arrays. Diese Methoden sind nicht auf andere JavaScriptObject-Unterklassen wie JsArray, da das Hinzufügen neuer Methoden vorhandene Subtypen möglicherweise zu brechen.