تحلل هذه الورقة آلية انعكاس Java في مثال. شاركه للرجوع إليه ، على النحو التالي:
التفكير ، غالبًا ما سمعت أني قد قرأت بعض المواد وربما استخدمتها في نمط التصميم ، لكنني شعرت أنه لم يكن لدي فهم أعمق لها.
1. دعونا نلقي نظرة على مفهوم الانعكاس:
إنه يشير بشكل أساسي إلى القدرة على أنه يمكن للبرنامج ما أن يصل إلى حالته أو سلوكه أو تعديله ، ويمكنه ضبط الحالة أو تعديلها ودلالاتها ذات الصلة للسلوك الموصوف على أساس السلوك ونتائج سلوكه.
الانعكاس هو أداة قوية في Java تتيح لنا بسهولة إنشاء رمز مرن يمكن تجميعه عند التشغيل دون الحاجة إلى ربط التعليمات البرمجية المصدر بين المكونات. لكن الاستخدام غير السليم للانعكاس سيكون مكلفًا للغاية!
من الساحف رؤية المفهوم ، واصل القراءة.
2. دور آلية الانعكاس:
1. فك الارتباط: .class->. جافا
2. الوصول إلى الخصائص والأساليب والمقدمات ، إلخ. من كائنات Java من خلال آلية الانعكاس ؛
يبدو أن هذا أسهل في الفهم.
3. دعونا نلقي نظرة أولاً على الفصول التي توفر لنا الشمس آلية الانعكاس:
java.lang.class ؛ java.lang.reflect.constructor ؛
يمكننا الاستعلام عن العديد من الأساليب والسمات والعمليات الأخرى في التفكير من هذه الفئات الأربع. أو هل تحتاج إلى تعلم الاستعلام عن واجهة برمجة التطبيقات باستمرار؟
4. تنفيذ وظائف محددة:
1. هناك ثلاث طرق للحصول على الفصل من خلال آلية التفكير.
// الطريقة الأولى: class.forname ("الموظف") ؛ الكائن في لغة Java لديه موظف getClass = موظف جديد () ؛2. قم بإنشاء كائن: بعد الحصول على الفصل ، سنقوم بإنشاء كائنه ونستخدم NewInstance:
الفئة C = class.forname ("الموظف")3. احصل على السمات: مقسمة إلى جميع السمات والسمات المحددة:
①.
// احصل على فئة الفئة بأكملها c = class.forname ("java.lang.integer") ؛ // الحصول على جميع السمات؟ الحقل [] fs = c.getDeclaredFields () ؛ // تحديد سلسلة طول المتغير ، استخدم للتخزين السمة stringbuffer sb = new StringBuffer () ؛ // تقسيم كل سمة إلى هذه السلسلة عن طريق إلحاق طريقة // التعريف العام الخارجي sb.append (modifier.toString ( ) +"{/n") ؛ // كل خاصية من الداخل لـ (حقل الحقل: fs) {sb.append ("/t") ؛ // Space sb.append (modifier .ToString (field.getmodiers ()) + "") ؛ // احصل على المعدلات للسمة ، مثل الجمهور ، الثابت ، إلخ. sb.append (field.gettype (). field.getName () + "؛/n") ؛ // اسم الخاصية + Enter} sb.append ("}") ؛ system.out.println (sb) ؛②.
static static void main (string [] args) يرمي الاستثناء {<span style = "White-Space: pre"> </span> // الطرق السابقة:/* user u = new user () ؛ // SET SYSTEM.PRINTLN (U.AGE) ؛ ) ؛ // تعيين القيمة "110" إلى سمة ID لكائن O IDF.SET (O ، "110") ؛4. الحصول على الأساليب وأساليب البناء ، لم تعد تصف بالتفصيل ، فقط انظر إلى الكلمات الرئيسية:
طريقة الكلمات الرئيسية
معنى
getDeclaredMethods ()
احصل على جميع الطرق
getReturnType ()
احصل على نوع العائد للطريقة
getParameterTypes ()
الحصول على نوع المعلمة الواردة للطريقة
getDeclaredMethod ("اسم الطريقة" ، المعلمة type.class ، ...)
احصل على طريقة محددة
الكلمات الرئيسية مُنشئ
معنى
getDeclaredConstructors ()
احصل على جميع المنشئين
getDeclaredConstructor (type.class ، ...)
احصل على مُنشئ معين
فئة الوالدين وواجهة الوالدين
معنى
getSuperClass ()
احصل على فئة الوالدين لفئة معينة
getInterfaces ()
الحصول على واجهة لنوع معين من التنفيذ
وبهذه الطريقة ، يمكننا الحصول على محتويات مختلفة من الفصل ونفزعه. بالنسبة إلى لغة مثل Java التي تجمع أولاً ثم يتم تشغيلها ، يمكن لآلية الانعكاس أن تجعل الكود أكثر مرونة وأسهل في تنفيذ الكائنات الموجهة.
5. انعكاس بالإضافة إلى ملفات التكوين تجعل برنامجنا أكثر مرونة:
في دراسة أنماط التصميم ، عند تعلم المصانع المجردة ، يتم استخدام التأمل لقراءة سلاسل ارتباط قاعدة البيانات بشكل أكثر ملاءمة ، وما إلى ذلك ، لذلك لم أفهمها كثيرًا في ذلك الوقت ، لذلك قمت بنسخها وفقًا لذلك. ألقِ نظرة على استخدام ملفات التكوين المنعكسة + في .NET:
كان ملف التكوين المستخدم في ذلك الوقت هو ملف App.Config ، وكان المحتوى بتنسيق XML ، وتم ملء محتويات قاعدة البيانات المرتبطة:
<IGNOMURITE> <APPSETTINGS> <إضافة key = "" value = ""/> </appsettings> </isplication>
كيف تكتب التفكير:
Assembly.load ("اسم التجميع الحالي"). CreateInstance ("اسم مساحة الاسم الحالية". اسم الفصل المراد إنشاء مثيل له) ؛
هذه الميزة هي أنه من السهل تسهيلنا لتحويل قاعدة البيانات. لاختياره.
بالطبع ، وينطبق الشيء نفسه في Java ، باستثناء أن ملف التكوين هنا هو .properties ، يسمى ملف الخاصية. اقرأ المحتويات في ذلك من خلال التفكير. وبهذه الطريقة تم إصلاح الرمز ، ولكن يمكننا تغيير محتوى ملف التكوين ، مما يجعل الكود لدينا أكثر مرونة!
لتلخيص ، يمكن أن يكون تعلم انعكاس Java مرة أخرى واستخدامه بمرونة جعل رمزنا أكثر مرونة ، ولكنه أيضًا له عيوب ، أي أن استخدامه سيقلل من أداء برنامجنا وزيادة التعقيد ، لذلك نحتاج أيضًا إلى استخدامه بعناية.
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.