Носорог: Как получить все свойства из ScriptableObject? - PullRequest
5 голосов
/ 01 апреля 2010

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

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

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 01 апреля 2010

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

Код:

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..
}
2 голосов
/ 30 мая 2012

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

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

Приведения было бы достаточно для вашего случая, потому что у вас есть только строки в качестве значений. Итак, если вы действительно хотели 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;
...