وحيد القرن: كيف تحصل على جميع الخصائص من ScriptableObject؟
-
23-09-2019 - |
سؤال
أنا أستخدم كائن 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..
}