2008-11-22 4 views
2

J'ai une méthode JSNI qui appelle une méthode Java qui prend un Hasmap comme entrée. J'ai essayéJava Hashmap et le type de tableau multidimensionnel sig dans JSNI?

[email protected]::myMethod(Ljava/util/Hashmap;)(myHashMap); 
[email protected]::myMethod(Ljava/util/Hashmap<Ljava/lang/String,Ljava/lang/String>;)(myHashMap); 

Je suis peut ne pas sembler définir la signature de type correct d'inclure les chaînes ou trouver si cet usage est même permis.

Depuis que je suis en train de faire cela dans GWT je pensais que ce pourrait être la mise en œuvre de hashmap et l'autre approche que j'ai prend bien un String [] [] tableau en entrée

J'espérais somwthing comme

gestionnaire @ com.mypackage :: myMethod ([[Ljava/lang/String; (myArray);

Cependant, je frappe une autre question de trouver le sntax de JNSI correcte pour la 2ème dimension du tableau

Une matrice de dimension unique à savoir. [Ljava/lang/String; va bien mais j'ai besoin de la 2ème dimension.

Toute aide/idées ou liens vers un bon document jnsi apprécié.

Répondre

0

Pouvez-vous poster l'erreur que vous obtenez, et aussi quel type d'objet javascript que vous essayez de passer comme un hashmap. Je suppose que vous obtenez une erreur de compilation?

Voici un bon début pour la documentation JSNI:

GWT JSNI doc

GWT Blog post on JSNI

+0

Le lien doc JSNI ne fonctionne plus :-( –

0

Ok, après avoir regardé ... il

je ne pouvais trouver aucune documentation ou arrangement donne le tableau multidimensionnel des chaînes. a réussi à obtenir ce fait en utilisant le HashMap, en utilisant:

[email protected]::myMethod(Ljava/util/Hashmap;)(myHashMap); 

travaillé si je définis l'entrée sans définir les types. Tels que:

HashMap myHashMap = new HashMap(); 

Cela donne au JSNI un HashMap de type <Object, Object>. Je traite ensuite l'objet de l'autre côté en transformant le contenu de la hashmap en chaînes.

Merci à rouillées pour les liens:

GWT JSNI doc - Ce qui est bon pour obtenir la bonne mise en forme des primitives

GWT Blog post on JSNI - avait pas vu ce blog avant

1

Je pense que vous » re courir dans l'effacement de type. Chaque paramètre d'objet générique est vraiment juste java.lang.Object à l'exécution. Je ne crois pas que les génériques soient exposés à JNI.

J'ai écrit du code JNI mais je n'ai jamais essayé d'utiliser des types génériques du code natif, donc je ne suis pas certain. Googling n'a pas trouvé de références ou d'exemples spécifiques.

Voir Java VM Type Signatures pour une référence aux signatures de type utilisé dans JNI (et JSNI)

Cependant, vous ne pouvez pas besoin de passer un Java HashMap à Javascript de toute façon. Au lieu de cela, envisagez d'utiliser JSONObject et de passer un objet JavaScript natif à votre code javascript. Il ressemble à ceci:

public void callFoo() { 
    JSONObject obj = new JSONObject(); 
    obj.put("propertyName", new JSONString("properyValue")); 
    JavaScriptObject jsObj = obj.getJavaScriptObject(); 

    nativeFoo(jsObj); 
    } 

    public native void nativeFoo(JavaScriptObject obj) /*-{ 
    $wnd.alert(obj['propertyName']); 
    }-*/; 

Ce à peu près se compile:

var obj = {'propertyName': 'propertyValue'}; 
$wnd.alert(obj['propertyName']); 
Questions connexes