بالإضافة إلى تزويدنا بمعلومات مختلفة حول الحصول على الفصول الدراسية خلال فترة التجميع ، تتيح لنا Java أيضًا الحصول على معلومات مختلفة حول الفصول خلال فترة التشغيل من خلال التفكير. استرداد معلومات الفصل من خلال التفكير وبعد الحصول على معلومات الفصل ، يمكنك الحصول على المحتوى التالي ذي الصلة:
ستقدم هذه المقالة أيضًا انعكاس Java من الجوانب المذكورة أعلاه. تنعكس جميع الرموز المشاركة في هذه المقالة
أولاً ، يتم إصدار فئة Java ككائن بحث للتأمل. محتوى الفصل كما يلي:
Public Class Class BoadObjects Runnable {public void dosomething () {system.out.println ("do things ...") ؛ }} الفئة العامة exampleObject يمتد BoadObject {Public int Age = 30 ؛ اسم السلسلة العامة = "byhieg" ؛ درجة عدد صحيح خاص = 60 ؛ public void printName () {system.out.println (name) ؛ } public int getage () {return Age ؛ } public void setage (int age) {this.age = age ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } integer getScore () {Return Score ؛ } public void setScore (integer score) {this.score = score ؛ } public exampleObject () {} public examplebject (اسم السلسلة) {} مثال عام example (int age ، integer procor) {} override public void dosomething () {super.dosomething () ؛ } Override public void run () {system.out.println ("Run ...") ؛ }}كائن فئة
سيستخدم تطبيقنا نقطة معرفة الانعكاس. يجب أن نرغب في الحصول على معلومات الفصل في وقت التشغيل والقيام ببعض العمليات المحددة بناءً على معلومات الفصل. بعد ذلك ، أول شيء هو الحصول على معلومات الفصل ، ويتم توفير كائن فئة في JDK لحفظ معلومات الفصل. لذلك ، فإن الخطوة الأولى في الانعكاس هي الحصول على كائن الفصل. هناك طريقتان للحصول على كائنات الفصل في JDK.
الأول هو أنه إذا كنت تعرف اسم الفصل عند كتابة رمز ، يمكنك الحصول مباشرة على كائن الفصل بالطريقة التالية:
Class exampleObjectClass = ExampleObject.class;
النوع الثاني هو أنه إذا كنت لا تعرف اسم الفصل عند كتابة الرمز ، ولكن في وقت التشغيل ، يمكنك الحصول على سلسلة من اسم الفصل ، ويمكنك الحصول على كائن الفصل بالطريقة التالية:
Class exampleObjectClass = Class.forName("cn.byhieg.reflectiontutorial.ExampleObject");
لاحظ أن هذه الطريقة تحتاج إلى وجود شروطين. أولاً ، يجب أن تكون السلسلة الموجودة في Forname اسمًا مؤهلاً تمامًا ، والثاني ، يجب أن تكون فئة الفصل أقل من مسار ClassPath ، لأن الطريقة ستلقي استثناءً من ClassNotFoundException.
بعد الحصول على كائن الفئة هذا ، يمكنك الحصول على معلومات مختلفة حول الفصل. تم ذكر بعض المعلومات في البداية. أدناه ، دعنا نتحدث عن المعلومات حول الفصل الذي لم يتم ذكره.
احصل على اسم الفصل
هناك طريقتان للحصول على اسم الفصل ، أحدهما هو getName () والآخر هو getSimplename (). يحصل الأول على اسم مؤهل تمامًا ، والثاني يحصل على اسم هذه الفئة بدون اسم حزمة. انظر إلى المثال التالي: كائن الفئة ، والذي تم الحصول عليه من خلال الكود أعلاه.
سلسلة fullClassName = exampleObjectClass.getName () ؛ String SimpleClassName = exampleObjectClass.getSimplename () ؛ System.out.println (fullClassName) ؛ System.out.println (SimpleClassName) ؛ System.out.println (SimpleClassName) ؛
النتائج كما يلي:
cn.byhieg.reflectiontutorial.exampleObjectexampleObject
احصل على اسم الحزمة للفصل والفئة الأم وواجهة التنفيذ
يمكن الحصول على اسم الحزمة وفئة الوالدين للفئة من خلال الكود التالي.
// الحصول على حزمة معلومات الحزمة apackage = exampleObjectClass.getPackage () ؛ system.out.println (apackage) ؛ // الحصول على فئة Parent Class Superclass = exampleObjectClass.getSuperClass () ؛ system.out.println (superclass.getSimplename ()) ؛
النتائج كما يلي:
حزمة cn.byhieg.reflectionTourorialFatherObject
من الواضح أن الحصول على قيمة إرجاع الفئة الأصل هو أيضًا كائن فئة. بعد ذلك ، يمكنك استخدام هذا الكائن للحصول على بعض المعلومات حول فئة الأصل ، مثل الحكم على ما إذا كانت فئة الوالدين فئة مجردة.
System.out.println("父类是不是抽象类" + Modifier.isAbstract(superClass.getModifiers()));
يمكن لـ GetModifiers الحصول على معدلات الفصل ، وبالتالي الحصول على المعدلات الفئة. بالطبع ، لا يمكن استدعاء هذا getModiers فقط كائنات الفئة ، ولكن يمكن استدعاء كائنات الطريقة.
يمكنك استخدام الطريقة في فئة java.lang.reflect.modifier للتحقق من نوع المعدل:
modifier.isabstract (int modifiers) ؛ modifier.isfinal (int modifiers) ؛ modifier.isinterface (int modifiers) ؛ modifier.isnative (int modifiers) ؛ modifier.isprivate ؛ المعدلات) ؛ modifier.isstrict (int modifiers) ؛ modifier.issynchronized (int modifiers) ؛ modifier.istransient (int modifiers) ؛ modifier.isvolatile (int modifiers) ؛
بالإضافة إلى ذلك ، يمكننا أيضًا الحصول على الواجهة التي تنفذها الفئة الأصل
// احصل على فئة الواجهة []] = superclass.getInterfaces () ؛ System.out.println ("واجهات الفئة الأصل" + فئات [0]) ؛نظرًا لأن فصول Java يمكنها تنفيذ العديد من الواجهات ، فإنها تستخدم المصفوفات ، ولكن عند استخدامها فعليًا ، تحتاج إلى تحديد طول الصفيف أولاً.
أدناه ، سوف نركز على شرح المحتوى المذكور أعلاه.
مُنشئ
باستخدام Java Reflection ، يمكنك الحصول على مُنشئ فئة ، وإنشاء كائن ديناميكي في وقت التشغيل بناءً على المُنشئ. أولاً ، تحصل Java على مثيل للمُنشئ بواسطة:
// constructorConstructor [] Constructors = exampleObjectClass.getConstructors () ؛ لـ (مُنشئ المنشئ: البنائين) {system.out.println (constructor.toString ()) ؛ }النتائج كما يلي:
public cn.byhieg.reflectiontutorial.exampleObject (int ، java.lang.integer) public cn.byhieg.reflectionTutorial.exampleObject (java.lang.string) public cn.byhieg.reflectionTutorial.exampleObject ()
إذا كنت تعرف نوع المعلمة للمنشئ للوصول مسبقًا ، فيمكنك استخدام الطريقة التالية للحصول على المُنشئ المحدد ، على النحو التالي:
مُنشئ المُنشئ = exampleObjectClass.getConstructor (string.class) ؛ System.out.println (Constructor.ToString ()) ؛
من الواضح أن النتيجة هي:
public cn.byhieg.reflectiontutorial.ExampleObject(java.lang.String)
يمكن أيضًا الحصول على مُنشئ آخر بالطريقة التالية
مُنشئ المُنشئ = exampleObjectClass.getConstructor (int.class ، integer.class) ؛ System.out.println (Constructor.ToString ()) ؛
بالإضافة إلى ذلك ، إذا لم نعرف معلمات المنشئ ويمكننا فقط الحصول على جميع كائنات المنشئ ، فيمكننا الحصول على المعلمات التي يستخدمها كل مُنشئ على النحو التالي:
مُنشئ [] Constructors = exampleObjectClass.getConstructors () ؛ لـ (مُنشئ المنشئ: البنائين) {class [] parametertypes = constructor.getParameterTypes () ؛ System.out.println ("معلمات المنشأة هي يتبع ============================================================= ================================================================= لـ (class clz: parametertypes) {system.out.println ("parametertype" + clz.toString ()) ؛النتائج كما يلي:
The constructor parameters are as follows================================== Parameter type class java.lang.String constructor parameters are as follows========================== Parameter type int parameter type class java.lang.Integer
هنا ، يمكن ملاحظة أن طريقة البناء بدون المعلمة لا تطبع النتيجة. كائن الفئة من النوع الأساسي وكائن الفئة من نوع المرجع مختلف.
الآن ، يمكن إنشاء كائن بشكل ديناميكي بناءً على معلومات مختلفة من المنشئ.
Object = constructor.newinstance (1،100) ؛ system.out.println (object.toString ()) ؛
هناك شروطان لإنشاء كائن. يتم إنشاء الأول من خلال مُنشئ المعلمات. والثاني هو أنه يجب الحصول على كائن المنشئ من خلال getConstructor الذي يمر في معلومات المعلمة.
الشرط الأول هو أنه بالنسبة للكائنات التي يمكن إنشاؤها بدون طرق بناء المعلمات ، ليست هناك حاجة للحصول على كائن المنشئ. كائن الفئة يستدعي طريقة newinstance () وإنشاء الكائن مباشرة.
الشرط الثاني هو أنه يجب الحصول على كائن المنشئ من خلال النموذج exampleObjectClass.getConstructor (string.class) ؛ سيكون من الخطأ الحصول على صفيف المنشئ من خلال GetConstructors ثم الاتصال بكائن المنشئ المحدد لإنشاء الكائن في JDK1.8. لكن JDK1.6 طبيعي.
عامل
باستخدام Java Reflection ، يمكنك الحصول على معلومات متغيرة لفئة في وقت التشغيل ، ويمكنك إنشاء كائن وتعيين القيمة المتغيرة وفقًا للطريقة أعلاه. أولاً ، يتم الحصول على جميع المتغيرات العامة باتباع الطريقة التالية:
الحقل [] الحقول = exampleObjectClass.getFields () ؛ لـ (حقل الحقل: الحقول) {system.out.println ("المتغير هو:" + field.toString ()) ؛ }النتائج كما يلي:
المتغير هو: public int cn.byhieg.reflectionTutorial.exampleObject.age المتغير هو: java.lang.string
من الواضح أن جميع المتغيرات العامة التي تم الحصول عليها عامة ، ولم يتم الحصول على درجة المتغير الخاص أعلاه.
بنفس الطريقة التي يتم بها الحصول على المُنشئ ، يمكننا تحديد اسم المعلمة ثم الحصول على المتغير المحدد:
حقل الحقل = exampleObjectClass.getField ("العمر") ؛ system.out.println ("المتغير هو:" + field.toString ()) ؛الاسم الذي تم الحصول عليه بواسطة طريقة tostring للمتغير أعلاه طويل جدًا. توفر Java طريقة GetName إلى فئة الحقل ، والتي تُرجع اسم المتغير المكتوب في الفصل. يمكن تغيير الرمز أعلاه إلى field.getName ().
لا يوفر الانعكاس وسيلة للحصول على المتغيرات فحسب ، بل يوفر أيضًا طريقة لضبط قيم متغيرة. باتباع الطريقة التالية ، يمكنك تغيير القيمة المتغيرة لفئة تم إنشاؤها ديناميكيًا:
exampleObject Object = ((exampleObject) constructor1.newinstance ("byhieg")) ؛ System.out.println ("العصر الأصلي هو" + object.age) ؛ field.set (كائن ، 10) ؛ System.out.println ("العمر بعد التغيير هو" + object.age) ؛النتائج كما يلي:
العمر الأصلي هو 30 والعمر بعد التغيير 10
وفقًا للرمز أعلاه ، يمكنك الحصول على كائن حقل يسمى Age ، ثم استدعاء طريقة SET للكائن ، وتمرير كائن والقيمة المراد تغييرها ، ثم يمكنك تغيير قيمة الكائن. لاحظ أن هذه الطريقة ليست مفيدة فقط للمتغيرات الأعضاء ، ولكن أيضًا للمتغيرات الثابتة. بالطبع ، إذا كان متغيرًا ثابتًا ، فمن الجيد تمرير NULL دون تمرير الكائن.
طريقة
بالإضافة إلى تزويدنا بمعلومات متغيرة للفئة ، توفر لنا Java Reflection معلومات الطريقة. يتيح لنا الانعكاس الحصول على اسم الطريقة ومعلمات الطريقة ونوع إرجاع الطريقة وطرق الاتصال.
أولاً ، احصل على الطريقة من خلال الكود التالي:
// الطريقة العامة لطريقة فئة الإخراج [] methods = exampleObjectClass.getMethods () ؛ لـ (الطريقة الطريقة: الطرق) {system.out.println ("method ="+ method.getName ()) ؛ }رمز يبدو مألوفًا مثل الحصول على المتغيرات. يتم استدعاء GetName مباشرة هنا للحصول على اسم الطريقة المكتوبة في الفصل. بعد أن كتبت هذا ، يجب أن تفكر بشكل طبيعي في أن Java توفر أيضًا طرقًا محددة تعتمد على المعلمات.
method method = exampleObjectClass.getMethod ("setage" ، int.class) ؛ System.out.println (method.getName ()) ؛الفرق هنا هو أن طريقة getMethod تحتاج أيضًا إلى تمرير معلومات نوع المعلمة ، ويوفر الانعكاس طريقة للحصول على معلمات الطريقة ونوع الإرجاع. أمثلة الحصول على معلمات الطريقة هي كما يلي:
method method = exampleObjectClass.getMethod ("setage" ، int.class) ؛ System.out.println (method.getName ()) ؛ لـ (class clz: method.getParameterTypes ()) {system.out.println ("parameter of method" + clz.getName ()) ؛ }النتائج كما يلي:
المعلمة int من طريقة الإعداد
مثال على الحصول على نوع إرجاع الطريقة كما يلي:
System.out.println(method.getReturnType().getName());
النتائج كما يلي:
void
بالإضافة إلى ذلك ، تدعم Java Reflection الطرق التي تم الحصول عليها من خلال استدعاء المكالمات. الأمثلة على النحو التالي:
method.invoke(exampleObjectClass.newInstance(),1);
المعلمة الأولى استدعاء هي هذا الكائن ، والمعلمة الثانية هي صفيف طول متغير ، ويتم تمرير معلمات الطريقة.
المتغيرات الخاصة والأساليب الخاصة
يمكن للطريقة أعلاه الحصول على الأساليب والمتغيرات العامة فقط ، ولكن لا يمكن الحصول على الأساليب والمتغيرات المعدلة غير العامة. توفر Java طرقًا إضافية للحصول على متغيرات وطرق غير عامة. أي أنه يتم الحصول على المتغيرات والأساليب الخاصة من خلال طرق getDeclaredFields وطرق getDeclaredMethods. كما يدعم استخدام GetDeclaredField (الاسم المتغير) و getDeclaredMethod (اسم الطريقة) للحصول على اسم المتغير المحدد واسم الطريقة. ومع ذلك ، لا يمكن استخدام كائنات الحقل وكائنات الطريقة التي تم الحصول عليها بهذه الطريقة مباشرة. يجب أن تسمى هذه الكائنات setAccessible (صواب) للاستخدام العادي. يمكن أن تكون الطريقة التالية هي نفسها كما هو مذكور أعلاه.
التعليقات التوضيحية
اكتب أولاً فصلًا يحتوي على تعليقات توضيحية:
myAnnotation (name = "byhieg" ، value = "hello world") annotationObject {myAnnotation (name = "field" ، value = "variable") حقل السلسلة العامة ؛ myAnnotation (name = "method" ، value = "method") public void dosomething () {system.out.println ("do something") ؛ } public void dootherthing (myAnnotation (name = "param" ، value = "param") string param) {}}@entry (enthypolicy.runtime) public interface myannotation {public string name () ؛ قيمة السلسلة العامة () ؛}توفر لنا Java معلومات حول الحصول على تعليقات صفية في وقت التشغيل ، ويمكننا الحصول على التعليقات التوضيحية للصف ، وشروط التعليقات التوضيحية ، والتعليقات التوضيحية للمعلمة ، والشروح المتغيرة.
مثل طريقة الاستحواذ أعلاه ، توفر Java طريقتين للاستحواذ. واحد هو الحصول على جميع التعليقات التوضيحية وإعادة صفيف ، والثاني هو تحديد التعليقات التوضيحية المحددة.
دعنا نأخذ شرحًا في الفصل كمثال لشرح الطريقتين التاليتين للحصول على.
Class CLZ = anotationObject.class ؛ التعليقات التوضيحية [] التعليقات التوضيحية = clz.getannotations () ؛ التعليق التوضيحي = clz.getAnnotation (annotationObject.class) ؛
بعد ذلك ، يمكن إجراء المعالجة اللاحقة بناءً على التعليق التوضيحي الذي تم الحصول عليه. فيما يلي مثال على المعالجة:
لـ (التعليق التوضيحي: التعليقات التوضيحية) {if (extreation extoryof myannotation) {myannotation myannotation = (myannotation) التعليق التوضيحي ؛ System.out.println ("name:" + myannotation.name ()) ؛ System.out.println ("value:" + myannotation.value ()) ؛ }}يتم الحصول على تعليقات الفئة أعلاه عن طريق استدعاء getAnnotations باستخدام كائن الفئة. تعليقات التعليقات التوضيحية والشروح المتغيرة هي نفسها. أدعو getDeclaredAntations باستخدام كائنات الطريقة وكائنات الحقل على التوالي للحصول على التعليقات التوضيحية. ليس لدي الكثير لأقوله. انظر رمز الانعكاس على سبيل المثال
التعليقات التوضيحية المعلمة هي عنصر مزعج نسبيا. تتم مقارنة طريقة الاستحواذ. الخطوة الأولى هي الحصول على كائن الطريقة أولاً واستدعاء getParameterNotations. ومع ذلك ، فإن قيمة الإرجاع هذه عبارة عن صفيف ثنائي الأبعاد ، لأن كائن الطريقة يحتوي على العديد من المعلمات ، وقد يكون لكل معلمة العديد من التعليقات التوضيحية. الأمثلة على النحو التالي:
الطريقة 1 = clz.getMethod ("dootherthing" ، string.class) ؛ التعليقات التوضيحية [] [] annotationInparam = method1.getParameterAnnotations () ؛ class [] params = method1.getParameterTypes () ؛ int i = 0 ؛ لـ (التعليقات التوضيحية [] التعليقات التوضيحية: enrotationInparam) {class para = params [i ++] ؛ لـ (التعليق التوضيحي: التعليقات التوضيحية) {if (extreation extoryof myannotation) {myannotation myannotation = (myannotation) التعليق التوضيحي ؛ System.out.println ("param:" + para.getName ()) ؛ System.out.println ("name:" + myannotation.name ()) ؛ System.out.println ("value:" + myannotation.value ()) ؛ }}}الأدوية
نظرًا لأنه يتم تنفيذ جافا جيرلسيات من خلال المحو ، فمن الصعب الحصول مباشرة على معلومات حول النوع المعلم المحدد من الأدوية ، ولكن يمكننا الحصول على معلومات عامة من خلال نموذج غير مباشر باستخدام الانعكاس. على سبيل المثال ، الفصل التالي:
الفئة العامة genericObject {قائمة عامة <string> قوائم ؛ القائمة العامة <string> getLists () {قوائم الإرجاع ؛ } public void setlists (قائمة <String> قوائم) {this.lists = lists ؛ }}إذا قامت طريقة بإرجاع فئة عامة ، فيمكننا استدعاء getGenericReturnType من خلال كائن الطريقة إلى getGenericReturnType للحصول على ما هو نوع المعلمة المحدد لهذه الفئة العامة. انظر إلى الكود التالي:
clas clz = genericObject.class ؛ طريقة الطريقة = clz.getMethod ("getLists") ؛ اكتب generictype = method.getGenericReturnType () ؛ if (مثيل generictype من المعلمة) {parameterizeType parameterype = ((parameteristype) generictype) ؛ اكتب [] أنواع = parameterizedType.getActualTyPearguments () ؛ لـ (type type: types) {class actualClz = ((class) type) ؛ System.out.println ("نوع المعلمة هو:" + actualClz) ؛ }}النتائج كما يلي:
参数化类型为: class java.lang.String
الخطوات مرهقة بعض الشيء ، وبالتالي فإن التفسير التالي هو:
حصلت على معلومات محددة حول الأدوية من خلال النظر في النتائج.
إذا لم تُرجع أي طريقة نوعًا عامًا ، فيمكننا أيضًا الحصول على النوع المعلم للنوع العام بواسطة معلمة الطريقة كفئة عامة ، مثل طريقة Setlists في الفئة أعلاه. الأمثلة على النحو التالي:
طريقة setMethod = clz.getMethod ("setlists" ، list.class) ؛ اكتب [] genericparametertypes = setMethod.getGenericParameterTypes () ؛ لـ (type genericparametertype: genericparametertypes) {system.out.println ("genericparametertypes هو:" + genericparametertype.gettypename ()) ؛ if (genericparametertype مثيل من المعلمة) {parameterizedType parameterype = ((parameteristype) genericparametertype) ؛ System.out.println ("parameterizedType هو:" + parameterizedType.getTyPename ()) ؛ أنواع الأنواع [] = parameterizedType.getActualTyPearguments () ؛ لـ (النوع النوع: أنواع) {system.out.println ("النوع المعلمات هو:" + ((class) type) .getName ()) ؛ }}}نتائج التنفيذ هي كما يلي:
genericparametertypes هي: java.util.list <java.lang.string> parameterizedtype هي: java.util.list <java.lang.string> نوع المعلمة هو: java.lang.string
نظرًا لأن معلمات الطريقة قد تحتوي على أكثر من نوع عام واحد ، فإننا نقوم بإعداد GetGenericParameterTypes للحصول على صفيف ، ونحن بحاجة إلى تحديد ما إذا كان لكل عنصر نوعًا محددًا. الخطوات اللاحقة مشابهة لتلك المذكورة أعلاه ، لذلك لن أقول الكثير.
إذا كانت معلمات الطريقة لا تحتوي على فئات عامة ، فسيتم ترك الحالة الأخيرة فقط ، من خلال النوع المتغير ، أي فئة الحقل. الأمثلة على النحو التالي:
حقل الحقل = clz.getfield ("قوائم") ؛ نوع النوع = field.getGenericType () ؛ if (type estruction of parameterizeType) {parameterizeType parameterype = ((parameterizedType) type) ؛ اكتب [] أنواع = parameterizedType.getActualTyPearguments () ؛ لـ (type type1: types) {system.out.println ("type type:" + ((class) type1) .gettypename ()) ؛ }}المبدأ هو نفسه كما هو مذكور أعلاه ، باستثناء أن كائن النوع هو من خلال Field.GetGenericType () ، لذلك لن أقول الكثير عن العمليات المتبقية.
هذا هو مقدمة للحصول على نوع المعلمة من الأدوية من خلال الانعكاس.
صفيف
يمكن أن تعمل Java Reflection على صفيف ، بما في ذلك إنشاء صفيف ، والوصول إلى القيم في صفيف ، والحصول على كائن فئة من صفيف.
دعنا نتحدث عن ذلك ببساطة ، إنشاء صفيف والوصول إلى القيم في الصفيف: استخدام فئة الصفيف في الانعكاس هو واحد أدناه حزمة الانعكاس.
// قم بإنشاء صفيف من نوع int بطول 3 int [] intarray = (int []) array.newinstance (int.class ، 3) ؛ // قم بتعيين قيمة للمصفوفة من خلال الانعكاس (int i = 0 ؛ i <intarray.length ؛ i ++) {array.set (Intarray ، i ، i+2) ؛ } // array في شكل انعكاس ، احصل على القيمة في الصفيف لـ (int i = 0 ؛ i <intarray.length ؛ i ++) {system.out.println (array.get (intarray ، i)) ؛ }ما سبق هو إنشاء صفيف والوصول إلى القيم في الصفيف باستخدام الانعكاس.
بالنسبة لكائنات الفصل التي تحصل على صفيف ، يمكنك ببساطة استخدام int []. الفصل ، أو استخدام class.forname ، وهي طريقة غريبة للكتابة:
clas clz = class.forname ("[i") ؛ System.out.println (clz.gettypename ()) ؛النتيجة هي:
int[]
السلسلة الموجودة في هذا الاسم المحظور ، [ تمثل صفيفًا ، وأنا أمثل int ، تعويم F ، مزدوج D ، إلخ. إذا كنت ترغب في الحصول على مجموعة من الكائنات العادية ، استخدم النموذج التالي:
Class stringClz = Class.forName("[Ljava.lang.String;");
[ قل أنها صفيف ، الجانب الأيمن من L هو اسم الفصل ، والجانب الأيمن من النوع هو ؛ ؛
هذه الطريقة للحصول على كائن فئة الصفيف مرهق للغاية.
بعد الحصول على كائن فئة الصفيف ، يمكن استدعاء بعض أساليبها الفريدة ، مثل استدعاء GetComponentType للحصول على معلومات النوع لأعضاء الصفيف. على سبيل المثال ، صفيف int هو نوع عضو ، وهو int.
System.out.println(clz.getComponentType().getTypeName());
النتيجة هي int
لخص
هذه المرة ، تنتهي التطبيقات المختلفة للتفكير مع هذا ، وقد يكون هناك تفسيرات معرفة متعمقة في المستقبل. للحصول على رمز محدد ، يمكنك النظر في رمز الانعكاس
في حزمة SRC ، هناك فئات مختلفة ، وفي فئة الاختبار ، يمكن الوصول إلى هذه الفئات.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة في دراسة أو عمل الجميع. آمل أيضًا دعم wulin.com أكثر!