Носорог: Как получить все свойства из ScriptableObject?
Я использую объект 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 ответа
Ну, если бы вы посмотрели поближе, вы бы увидели, что 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..
}