Rhino: Come ottenere tutte le proprietà da ScriptableObject?
-
23-09-2019 - |
Domanda
Sto usando un oggetto JavaScript come un oggetto con proprietà di configurazione. Per esempio. Ho questo oggetto in javascript:
var myProps = {prop1: 'prop1', prop2: 'prop2', 'prop3': 'prop3'};
Questo oggetto (NativeObject) viene restituito a me in funzione di Java. Per es.
public Static void jsStaticFunction_test(NativeObject obj) {
//work with object here
}
Voglio ottenere tutte le proprietà di oggetti e costruire HashMap da esso.
Ogni aiuto sarà apprezzato.
Soluzione
bene, se hai guardato più da vicino, si sarebbe visto che NativeObject implementa l'interfaccia Map, così si potrebbe aver lavorato molto bene con il NativeObject .... Ma per rispondere alla tua domanda: si potrebbe avere utilizzato l'approccio comune per ottenere le coppie chiave-valore di qualsiasi mappa
for (Entry<Object, Object> e : obj.entrySet()){
mapParams.put(e.getKey().toString(), e.getValue().toString());
}
Un cast sarebbe stato sufficiente per il vostro caso, perché hai solo stringhe come valori. Quindi, se si voleva davvero un HashMap:
HashMap<String, String> mapParams = new HashMap<String, String>((Map<String,String>)obj); //if you wanted a HashMap
Ma se si voleva solo un generico Map, è stato ancora più semplice e meno RAM consumando:
Map<String, String> mapParams = (Map<String,String>)obj;
Altri suggerimenti
Quindi, ho risolto il mio problema:)
Codice:
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..
}