代码之家  ›  专栏  ›  技术社区  ›  Vitaly Dyatlov

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

  •  5
  • Vitaly Dyatlov  · 技术社区  · 16 年前

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

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

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

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

    我想从对象中获取所有属性,并从中构建哈希映射。

    如有任何帮助,我们将不胜感激。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Radu Simionescu    14 年前

    好吧,如果仔细观察,您会发现NativeObject实现了映射接口,因此您可以很好地处理NativeObject….但要回答您的问题:您可以使用常见的方法来获取任何映射的键值对。

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

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

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

    但是,如果您只是想要一个通用的映射,它会更简单,而且RAM消耗更少:

    Map<String, String> mapParams = (Map<String,String>)obj;
    
        2
  •  10
  •   Vitaly Dyatlov    16 年前

    所以,我解决了我的问题。)

    代码:

    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..
    }
    
    推荐文章