Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

ну, если бы вы присмотрелись, вы бы увидели, что 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;

Другие советы

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

Код:

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..
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top