2010-04-01 10 views
5

Estoy usando un objeto Javascript como un objeto con propiedades de configuración. P. ej. Tengo este objeto en javascript:Rhino: ¿Cómo obtener todas las propiedades de ScriptableObject?

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

Este objeto (NativeObject) se devuelve a mí en función de Java. P. ej.

public Static void jsStaticFunction_test(NativeObject obj) { 
    //work with object here 
} 

Deseo obtener todas las propiedades del objeto y compilar HashMap a partir de él.

Cualquier ayuda será apreciada.

Respuesta

2

bien, si uno mira más de cerca, se habría visto que NativeObject implementa la interfaz del mapa, por lo que podría haber funcionado muy bien con el NativeObject .... Pero para responder a su pregunta: ¿se podría haber utilizado el enfoque común para obtener los pares de valores clave de cualquier mapa

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

Un molde tendría abeja lo suficiente para su caso, porque solo tiene cadenas como valores. Por lo tanto, si realmente quería un HashMap:

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

Pero si sólo quería un mapa genérico, que era aún más simple y menos RAM que consume:

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

Por lo tanto, he resuelto mi 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.. 
} 
Cuestiones relacionadas