2010-04-01 4 views
5

Я использую объект Javascript как объект с свойствами конфигурации. . У меня есть этот объект в javascript:Rhino: Как получить все свойства из ScriptableObject?

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

Этот объект (NativeObject) возвращается мне в функции Java. .

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

Я хочу получить все свойства объекта и создать из него HashMap.

Любая помощь будет оценена по достоинству.

ответ

2

хорошо, если вы присмотрелся, то увидел бы, что NativeObject реализует интерфейс карты, так что вы могли бы работать очень хорошо с NativeObject .... Но чтобы ответить на ваш вопрос: вы могли бы использовать общий подход для получения пар ключ-значение любой карты

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

бросок будет иметь пчела n достаточно для вашего случая, потому что у вас есть только строки как значения. Итак, если вы действительно хотели HashMap:

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

Но если вы просто хотели родовую карту, это было еще проще, и меньше оперативной памяти потребления:

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

Итак, я решил мою проблему :)

Код:

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.. 
} 
Смежные вопросы