2010-04-01 13 views
5

Yapılandırma özelliklerine sahip bir nesne olarak bir Javascript nesnesi kullanıyorum. E.g. Javascript bu nesne var:Rhino: ScriptableObject'ten tüm özellikleri nasıl alabilirim?

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

Bu nesne (NativeObject) Java işlevinde bana döndürülür. E.g.

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

Nesneden tüm özellikleri almak ve ondan HashMap oluşturmak istiyorum.

Herhangi bir yardım için teşekkür ederiz.

cevap

2

iyi, sen çok iyi çalışmış olabilir bu yüzden NativeObject, Harita arabirimini uygulaması görürdü NativeObject ile .... Ama sorunuzun cevabı: A dökme arı olurdu

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

herhangi haritanın anahtar-değer çiftleri almak için ortak bir yaklaşım kullanmış olabilir Durumunuz için yeterli, çünkü değerler olarak sadece dizeleriniz var. Yani bir HashMap isteseydi:

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

sadece genel bir harita isteseydi Ama, hatta daha basit olduğunu ve daha az RAM tüketen:

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

Yani, benim problem :) çözüldü

Kod: daha yakın görünüyorsa

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.. 
}