تعلم انعكاس جافا <BR> يمكن فهم ما يسمى بالانعكاس على أنه عملية الحصول على معلومات نوع الكائن أثناء وقت التشغيل. تتطلب أساليب البرمجة التقليدية من المبرمجين تحديد الأنواع التي سيتم استخدامها في مرحلة الترجمة، ولكن بمساعدة التفكير، يمكن للمبرمجين الحصول على هذه المعلومات ديناميكيًا وكتابة المزيد من التعليمات البرمجية المحمولة. بالمعنى الدقيق للكلمة، الانعكاس ليس سمة من سمات لغة البرمجة، لأنه يمكن تنفيذ آلية الانعكاس بأي لغة، ولكن إذا كانت لغة البرمجة نفسها تدعم الانعكاس، فسيكون تنفيذ الانعكاس أكثر ملاءمة.
1. احصل على فئة النوع <BR> نحن نعلم أن كل شيء في Java هو كائن، والكائنات التي نستخدمها عمومًا ترث بشكل مباشر أو غير مباشر من فئة الكائن. تحتوي فئة الكائن على طريقة تسمى getClass، والتي يمكن استخدامها للحصول على فئة النوع للمثيل. تشير فئة النوع إلى فئة تمثل نوعًا ما، لأن كل شيء هو كائن، والأنواع ليست استثناءً في Java، يتم استخدام فئة النوع لتمثيل النوع. كافة فئات النوع هي مثيلات لفئة Class. على سبيل المثال، هنا هو الجزء التالي من التعليمات البرمجية:
أ أ = جديد أ()؛
إذا (a.getClass()==A.class)
System.out.println("يساوي");
else System.out.println("غير متكافئ");
والنتيجة هي "يساوي" مطبوعة.
يمكن ملاحظة أن الكائن a هو مثيل لـ A، وهو فئة معينة من A. والنتيجة التي يتم إرجاعها باستخدام a.getClass() في عبارة if هي بالضبط فئة النوع A. للتعبير عن نوع معين من فئة النوع في Java، يمكنك استخدام طريقة "Type.class"، لأن a.getClass() تحصل على فئة النوع A، وهي A.class، وبالتالي فإن نتيجة تنفيذ الكود أعلاه هي طباعة "يساوي". ملاحظة خاصة هي أن فئات النوع لها مراسلات فردية. تختلف فئة النوع للفئة الأصلية وفئة النوع للفئة الفرعية. لذلك، بافتراض أن A هي فئة فرعية من B، فإن الكود التالي سيحصل على الإخراج "غير متكافئ":
أ أ = جديد أ()؛
إذا (a.getClass()==B.class)
System.out.println("يساوي");
else System.out.println("غير متكافئ");
لذلك، إذا كنت تعرف مثيلًا، فيمكنك الحصول على فئة النوع لذلك الكائن باستخدام طريقة "getClass()" الخاصة بالمثيل، وإذا كنت تعرف نوعًا ما، فيمكنك الحصول على فئة النوع من هذا النوع باستخدام طريقة ".class" .
2. الحصول على معلومات النوع <BR> بعد الحصول على فئة النوع، يمكنك استدعاء بعض الطرق للحصول على معلومات النوع، والطرق الرئيسية هي:
getName():String: احصل على الاسم الكامل للنوع.
getSuperClass():Class: احصل على الفئة الأصلية المباشرة لهذا النوع إذا لم يكن لدى النوع فئة أصلية مباشرة، فارجعه فارغًا.
getInterfaces():Class[]: احصل على كافة الواجهات التي يتم تنفيذها بواسطة هذا النوع.
isArray():boolean: تحديد ما إذا كان النوع عبارة عن مصفوفة.
isEnum():boolean: تحديد ما إذا كان النوع هو نوع التعداد.
isInterface():boolean: تحديد ما إذا كان النوع عبارة عن واجهة.
isPrimitive():boolean: تحديد ما إذا كان النوع هو نوع أساسي، أي ما إذا كان int أو boolean أو double وما إلى ذلك.
isAssignableFrom(Class cls):boolean: تحديد ما إذا كان هذا النوع هو الفئة الأصلية (السلف) أو الواجهة الأصلية (السلف) من النوع cls.
getComponentType():Class: إذا كان النوع عبارة عن مصفوفة، فسيتم إرجاع نوع مكون المصفوفة.
بالإضافة إلى ذلك، يمكن أيضًا إجراء عمليات مثل تحويل النوع، والطرق الرئيسية هي:
asSubclass(Class clazz):Class: تغيير هذا النوع