Rhino:如何从ScriptableObject获取所有属性?

Vit*_*lov 5 javascript java properties rhino scriptable

我使用Javascript对象作为具有配置属性的对象.例如,我在javascript中有这个对象:

var myProps = {prop1: 'prop1', prop2: 'prop2', 'prop3': 'prop3'};
Run Code Online (Sandbox Code Playgroud)

这个对象(NativeObject)在Java函数中返回给我.例如

public Static void jsStaticFunction_test(NativeObject obj) {
    //work with object here
}
Run Code Online (Sandbox Code Playgroud)

我想从object获取所有属性并从中构建HashMap.

任何帮助将不胜感激.

Vit*_*lov 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..
}
Run Code Online (Sandbox Code Playgroud)


Rad*_*scu 2

好吧,如果你仔细观察,你会发现 NativeObject 实现了 Map 接口,所以你可以很好地使用 NativeObject......但是要回答你的问题:你可以使用常见的方法来获取密钥 -任何映射的值对

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

对于您的情况来说,强制转换就足够了,因为您只有字符串作为值。所以,如果你真的想要一个 HashMap:

HashMap<String, String> mapParams = new HashMap<String, String>((Map<String,String>)obj); //if you wanted a HashMap
Run Code Online (Sandbox Code Playgroud)

但如果你只想要一个通用的 Map,它甚至更简单,并且消耗更少的 RAM:

Map<String, String> mapParams = (Map<String,String>)obj;
Run Code Online (Sandbox Code Playgroud)