Rhino: Comment obtenir toutes les propriétés de ScriptableObject?
-
23-09-2019 - |
Question
J'utilise un objet JavaScript comme un objet avec des propriétés de configuration. Par exemple. J'ai cet objet en javascript:
var myProps = {prop1: 'prop1', prop2: 'prop2', 'prop3': 'prop3'};
Cet objet (NativeObject) me est retourné dans la fonction Java. Par exemple.
public Static void jsStaticFunction_test(NativeObject obj) {
//work with object here
}
Je veux obtenir toutes les propriétés de l'objet et de construire HashMap de celui-ci.
Toute aide sera appréciée.
La solution
Eh 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 travaillé très bien avec le NativeObject .... Mais pour répondre à votre question: vous auriez pu utiliser l'approche commune pour obtenir les paires de valeurs clés de toutes les cartes
for (Entry<Object, Object> e : obj.entrySet()){
mapParams.put(e.getKey().toString(), e.getValue().toString());
}
Un casting aurait été suffisant pour votre cas, parce que vous avez en tant que valeurs que des chaînes. 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 consommatrice de RAM:
Map<String, String> mapParams = (Map<String,String>)obj;
Autres conseils
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..
}