2010-04-01 4 views
5

J'utilise un objet Javascript en tant qu'objet avec des propriétés de configuration. E.g. J'ai cet objet en javascript:Rhino: Comment obtenir toutes les propriétés de ScriptableObject?

var myProps = {prop1: 'prop1', prop2: 'prop2', 'prop3': 'prop3'}; 

Cet objet (NativeObject) est retourné en me fonction Java. E.g. Je veux obtenir toutes les propriétés de l'objet et construire HashMap à partir de celui-ci.

Toute aide sera appréciée.

Répondre

2

bien, si vous avez regardé de plus près, vous auriez vu que NativeObject implémente l'interface de la carte, de sorte que vous pourriez avoir très bien avec le NativeObject .... Mais pour répondre à votre question: vous auriez pu utiliser l'approche commune pour obtenir les paires clé-valeur de toute carte

for (Entry<Object, Object> e : obj.entrySet()){ 
    mapParams.put(e.getKey().toString(), e.getValue().toString()); 
} 

Un casting aurait abeille n assez pour votre cas, car vous n'avez que des chaînes comme valeurs. Donc, si vous vouliez vraiment un HashMap:

HashMap<String, String> mapParams = new HashMap<String, String>((Map<String,String>)obj); //if you wanted a HashMap 

Mais si vous voulez juste une carte générique, il est encore plus simple et moins de RAM consommer:

Map<String, String> mapParams = (Map<String,String>)obj; 
10

Alors, je résolu mon problème :)

code:

public static void jsStaticFunction_test(NativeObject obj) { 
    HashMap<String, String> mapParams = new HashMap<String, String>(); 

    if(obj != null) { 
     Object[] propIds = NativeObject.getPropertyIds(obj); 
     for(Object propId: propIds) { 
      String key = propId.toString(); 
      String value = NativeObject.getProperty(obj, key).toString(); 
      mapParams.put(key, value); 
     } 
    } 
    //work with mapParams next.. 
} 
Questions connexes