2010-04-01 21 views
5

Sto usando un oggetto Javascript come oggetto con proprietà di configurazione. E.g. Ho questo oggetto in javascript:Rhino: come ottenere tutte le proprietà da ScriptableObject?

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

Questo oggetto (NativeObject) viene restituito a me in funzione di Java. E.g.

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

Voglio ottenere tutte le proprietà da oggetto e creare da esso HashMap.

Qualsiasi aiuto sarà apprezzato.

risposta

2

bene, se hai guardato più da vicino, si sarebbe visto che NativeObject implementa l'interfaccia Map, quindi si potrebbe avere lavorato molto bene con la 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 avrebbe bee n abbastanza per il tuo 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; 
10

Così, 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.. 
} 
Problemi correlati