Rhino: Como obter todas as propriedades do ScriptableObject?
-
23-09-2019 - |
Pergunta
Estou usando um objeto JavaScript como um objeto com propriedades de configuração. Por exemplo, eu tenho esse objeto em JavaScript:
var myProps = {prop1: 'prop1', prop2: 'prop2', 'prop3': 'prop3'};
Este objeto (NativoBject) é devolvido a mim na função Java. Por exemplo
public Static void jsStaticFunction_test(NativeObject obj) {
//work with object here
}
Quero obter todas as propriedades do objeto e construir o hashmap dele.
Qualquer ajuda será apreciada.
Solução
Bem, se você olhasse mais de perto, teria visto que o Nativo-Object implementa a interface do mapa, para que você possa ter funcionado muito bem com o NativeObject ... mas para responder à sua pergunta: você poderia ter usado a abordagem comum para obter a chave- pares de valor de qualquer mapa
for (Entry<Object, Object> e : obj.entrySet()){
mapParams.put(e.getKey().toString(), e.getValue().toString());
}
Um elenco seria suficiente para o seu caso, porque você tem apenas cordas como valores. Então, se você realmente queria um hashmap:
HashMap<String, String> mapParams = new HashMap<String, String>((Map<String,String>)obj); //if you wanted a HashMap
Mas se você só queria um mapa genérico, era ainda mais simples e menos consumidor de carneiro:
Map<String, String> mapParams = (Map<String,String>)obj;
Outras dicas
Então, eu resolvi meu problema :)
Código:
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..
}