آلية انعكاس جافا
آلية انعكاس Java في حالة الجري وتسمى الطريقة آلية الانعكاس للغة جافا.
توفر آلية انعكاس Java الوظائف التالية: تحديد الفئة التي ينتمي إليها أي كائن في وقت التشغيل ؛ كائن
1. احصل على خصائص كائن
نسخة الكود كما يلي:
الكائن العام getProperty (مالك الكائن ، سلسلة FieldName) يلقي الاستثناء {
class ownerClass = owner.getClass () ؛
حقل الحقل = ownerClass.getField (FieldName) ؛
خاصية الكائن = field.get (المالك) ؛
إرجاع الممتلكات ؛
}
Class Owntclass = owner.getClass (): احصل على فئة هذا الكائن.
حقل الحقل = ownerClass.getField (اسم FieldName): احصل على السمة المعلنة من خلال الفصل من خلال الفصل.
Property = Field.get (المالك): احصل على مثيل لهذا الخاصية من خلال الكائن.
2. احصل على الخصائص الثابتة لفئة معينة
نسخة الكود كما يلي:
الكائن العام getStaticProperty (سلسلة classname ، سلسلة FieldName)
رمي الاستثناء {
Class Owntclass = class.forname (className) ؛
حقل الحقل = ownerClass.getField (FieldName) ؛
خاصية الكائن = field.get (ownerClass) ؛
إرجاع الممتلكات ؛
}
Class Owntclass = class.forname (className): احصل أولاً على فئة هذه الفئة.
حقل الحقل = ownerClass.getField (FieldName): كما هو أعلاه ، احصل على السمات التي تم إعلانها بواسطة الفصل من خلال الفصل.
خاصية الكائن = field.get (ownerClass): هذا يختلف قليلاً عن ما سبق ، لأن الخاصية ثابتة ، لذلك يتم أخذها مباشرة من فئة الفصل.
3. طرق لتنفيذ كائن
نسخة الكود كما يلي:
الكائن العام InvokeMethod (مالك الكائن ، string methodname ، Object [] args) يلقي الاستثناء {
class ownerClass = owner.getClass () ؛
الفئة [] argsClass = فئة جديدة [args.length] ؛
لـ (int i = 0 ، j = args.length ؛ i <j ؛ i ++) {
argsclass [i] = args [i] .getClass () ؛
}
طريقة الطريقة = ownerClass.getMethod (MethodName ، argsClass) ؛
إرجاع method.invoke (المالك ، args) ؛
}
owner_class = owner.getClass (): أولاً وقبل كل شيء ، يجب أن تحصل على فئة هذا الكائن.
الأسطر 5 إلى 9: تكوين صفيف الفئة من المعلمات كشرط لإيجاد الطريقة.
طريقة method = ownerClass.getMethod (MethodName ، argsClass): احصل على الطريقة المراد تنفيذه بواسطة MethodName و ArgsClass (نوع المعلمة المحدد في الطريقة).
method.invoke (المالك ، args): المعلمات التي تنفذ الطريقة. . قيمة الإرجاع هي الكائن ، وهو أيضًا قيمة إرجاع الطريقة.
4. تنفيذ طريقة ثابتة لفئة معينة
نسخة الكود كما يلي:
الكائن العام InvokestaticMethod (سلسلة ClassName ، سلسلة MethodName ،
كائن [] args) يلقي الاستثناء {
Class Owntclass = class.forname (className) ؛
الفئة [] argsClass = فئة جديدة [args.length] ؛
لـ (int i = 0 ، j = args.length ؛ i <j ؛ i ++) {
argsclass [i] = args [i] .getClass () ؛
}
طريقة الطريقة = ownerClass.getMethod (MethodName ، argsClass) ؛
طريقة العودة. invoke (null ، args) ؛
}
المبدأ الأساسي هو نفس المثال 3 ، والفرق هو السطر الأخير.
5. إنشاء مثيل جديد
نسخة الكود كما يلي:
الكائن العام newinstance (سلسلة classname ، كائن [] args) يلقي الاستثناء {
class newOneclass = class.forname (className) ؛
الفئة [] argsClass = فئة جديدة [args.length] ؛
لـ (int i = 0 ، j = args.length ؛ i <j ؛ i ++) {
argsclass [i] = args [i] .getClass () ؛
}
Constructor Cons = newOneclass.getConstructor (argsClass) ؛
إرجاع cons.newinstance (args) ؛
}
الطريقة المذكورة هنا هي تنفيذ مُنشئ يحتوي على معلمات لإنشاء مثيل جديد. إذا لم تكن هناك حاجة إلى معلمات ، فيمكنك استخدام NewOneclass.newinstance () مباشرة لتنفيذها.
class newOneclass = class.forname (className): الخطوة الأولى هي الحصول على فئة المثيل المراد إنشائها.
الأسطر 5 إلى 9: الحصول على صفيف الفئة من المعلمات.
Constructor Cons = newOneclass.getConstructor (argsClass): الحصول على مُنشئ.
cons.newinstance (args): إنشاء مثيل جديد.
6. حدد ما إذا كان مثيلًا لفئة معينة
نسخة الكود كما يلي:
isinstance المنطقية العامة (كائن OBJ ، Class CLS) {
إرجاع cls.isinstance (OBJ) ؛
}
7. احصل على عنصر في الصفيف
نسخة الكود كما يلي:
كائن عام getByarray (صفيف الكائن ، int index) {
return Array.get (Array ، Index) ؛
}