تتطلب حقول صفحة القائمة أن يتم فرزها وفقًا لتفضيلات المستخدم ، لذلك تتوافق حقول كل مستخدم مع ترتيب مختلف (يتم تخزين ترتيب الحقل في قاعدة البيانات). القيم التي نأخذها من قاعدة البيانات هي كائنات ، لكن قيم نقل المقدمة هي Ajax و JSON Array ، لذلك نواجه مشكلة تحويل الكائن إلى JSON: 1. ترتيب حقل كل مستخدم غير ثابت ، ولا يمكن كتابة الرمز. 2. احصل على القيم وفقًا لترتيب حقل المستخدم. إذا كنت تستخدم إذا كنت ستحكم على كل قيمة ثم استدعاء طريقة مختلفة ، فهناك الكثير من البيانات الشرطية. ثم نظرت إلى التفكير.
فئة النموذج ، نفس النموذج العادي
شخص فئة عامة {اسم السلسلة الخاصة ؛ عصر INT الخاص ؛ عنوان السلسلة الخاص ؛ سلسلة خاصة. جنسية سلسلة خاصة السلسلة العامة getName () {return name ؛ } // فيما يلي أساليب Get and Set ، تم حذفها. } فئة الاختبار
استيراد java.lang.reflect.invocationTargetException ؛ استيراد java.lang.reflect.method ؛ استيراد java.util.arraylist ؛ import java.util.list ؛ اختبار الفئة العامة {// init person object. الشخص الخاص initPerson () {person p = new person () ؛ P.SetName ("الاسم") ؛ P.Setage (21) ؛ p.setAddress ("هذا هو بلدي addrss") ؛ P.SetPhonenber ("12312312312") ؛ P.SetSex ("F") ؛ العودة P ؛ } الفراغ الثابت العام (سلسلة [] args) يلقي SecurityException ، nosuchmethodexception ، غير unalfalArgumentException ، غير شرعي accessexception ، invocationTargetException {test test = new test () ؛ الشخص p = test.initperson () ؛ قائمة <Tring> list = new ArrayList <String> () ؛ // إضافة كل طريقة الحصول على. // لا يوجد اسم "()" من الأساليب. list.add ("getName") ؛ list.add ("getage") ؛ list.add ("getaddress") ؛ list.add ("getPhonenumber") ؛ list.add ("getSex") ؛ لـ (String Str: List) {// Get Method مثيل. First Param هو اسم الطريقة والثاني Param هو param type. // لأن Java يخرج من نفس الطريقة للبرامات المختلفة ، يمكن فقط اسم الطريقة ونوع المعلمة أن تؤكد طريقة. طريقة طريقة = p.getClass (). getMethod (Str ، فئة جديدة [0]) ؛ . // param الثاني هو param. System.out.println (Str + "(): GET VALUE هي" + method.invoke (P ، كائن جديد [0])) ؛ }}}يمكنك أيضًا استخدام الحقول التي تم الحصول عليها بواسطة قاعدة البيانات للحصول على القيمة المقابلة من الكائن.
تحتاج الطريقة أعلاه إلى إضافة اسم طريقة GET إلى القائمة بحيث يمكن الحصول على القيمة بناءً على اسم طريقة GET المقابل. إذا كان المقدمة هو مجرد اسم خاصية ، فيجب علينا تحويله إلى طريقة GET المقابلة ، وهي مزعجة.
الفراغ الثابت العام getValueByProperty (الشخص P ، سلسلة PropertyName) يلقي OffectionException ، غير unalfalArgumentException ، غير aluallyalAccessexception ، invocationTargetException {// الحصول على الممتلكات من قبل propertyName. PropertyDescriptor pd = new propertyDescriptor (propertyName ، p.getClass ()) ؛ طريقة طريقة = pd.getReadMethod () ؛ كائن o = method.invoke (p) ؛ System.out.println ("PropertyName:" + propertyName + "/t value هي:" + O) ؛ } الفراغ الثابت العام (سلسلة [] args) يلقي SecurityException ، nosuchmethodexception ، غير unalfalArgumentException ، غير aluallyalAccessexception ، invocationTargetException ، OffectionException {test test = new test () ؛ الشخص p = test.initperson () ؛ // الحصول على جميع الخصائص. الحقل [] الحقول = p.getClass (). getDeclaredFields () ؛ لـ (الحقل الحقل: الحقول) {getValueByProperty (p ، field.getName ()) ؛ }} وبهذه الطريقة ، يمكنك الحصول مباشرة على القيمة المقابلة من خلال PROPERTIONNAME تم تمريرها.
المقالة أعلاه Java Reflection تستدعي بشكل ديناميكي طرقًا مختلفة (أمثلة) وفقًا لأسماء الطرق المختلفة ، كل المحتوى الذي أشاركه معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.