سؤال

أنا أستخدم كائن JavaScript ككائن له خصائص التكوين. على سبيل المثال لدي هذا الكائن في جافا سكريبت:

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

يتم إرجاع هذا الكائن (NativeObject) إلي في وظيفة Java. على سبيل المثال

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

أريد الحصول على جميع الخصائص من الكائن وبناء hashmap منه.

سيكون موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

حسنًا ، إذا نظرت عن قرب ، فسترى أن NativeObject تنفذ واجهة الخريطة ، لذلك كان بإمكانك العمل بشكل جيد للغاية مع 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