مقدمة
يعلم الجميع أنه مع استخدام Java8 ، تمت إضافة معلمة كائن جديدة إلى توقيع الطريقة المقابلة لتمثيل معلومات معلمة محددة. يمكن الحصول على اسم المعلمة المقابلة من خلال اسمه. وهذا هو ، مثل المكتوبة في الكود ، مثل اسم المستخدم ، عند تمرير المعلمات في المقدمة ، ليست هناك حاجة لكتابة التعليقات التوضيحية مثل فئة parameter ("username") ، ولكن يمكن أن تخطط مباشرة بالاسم.
يظهر مرجع الرمز التالي:
الفئة العامة t {private interface t2 {void method (string username ، string password) ؛ } public static void main (string [] args) يلقي الاستثناء {system.out.println (t.class.getMethod ("main" ، string []. class) .getParameters () [0] .getName ()) ؛ system.out.println (t2.class.getMethod ("method" ، string.class ، string.class) .getParameters () [0] .getName ()) ؛ System.out.println (t2.class.getMethod ("method" ، string.class ، string.class) .getParameters () [1] .getName ()) ؛ }} قبل Java8 ، يمكنك أيضًا الحصول على معلومات اسم المعلمة من خلال بعض الوسائل ، ولكن الطرق مختلفة. على سبيل المثال ، يمكن لـ ParameterMethodNameResolver في Spring MVC العمل أيضًا بشكل طبيعي في الإصدارات السابقة. ومع ذلك ، فإنه يتطلب فقط تجميع خاص. ما ينجح هنا هو LocalVariableTable و MethodParameters ، والتي يتم تجميعها في الجداول المتغيرة المحلية وجداول المعلمات الطريقة باللغة الصينية.
جدول متغير محلي محلي
وفقًا لمواصفات JVM ، يوجد جدول المتغير المحلي في سمة الكود ، وسمات الكود هي أيضًا سمة من MethodInfo. يمكن أن يُفهم أنه عندما يكون للطريقة هيئة طريقة ، ستظهر سمة الكود المقابل. في سمة الكود ، بالإضافة إلى تنفيذ الكود المحدد ، ستكون هناك معلومات أخرى. على سبيل المثال ، LinenumberTable (يستخدم لوصف موقع كل سطر من الكود).
يعد الجدول المتغير المحلي جزءًا من معلومات التصحيح في الطريقة ، لذلك لن يتم إنشاء هذه المعلومات افتراضيًا في ملف الفصل. يجب تشغيل مفاتيح -g أو -g: Vars. لحسن الحظ ، بالنسبة لتجميع IDE أو Maven ، يتم تشغيل هذه المفاتيح بشكل افتراضي. في IDE ، يمكنك التحكم فيه عن طريق الإعداد (إنشاء معلومات تصحيح الأخطاء للفكرة) (التحقق الافتراضي). في Maven ، ما إذا كان يتم التحكم في الإخراج عن طريق تصحيح الأخطاء أو تصحيح الأخطاء في المكونات الإضافية في Maven-Compiler-Plugin (القيمة الافتراضية صحيحة).
الجدول المتغير المحلي هو بعد javap ، على النحو التالي:
// طريقة غير متتالية localVariableTable: START طول فتحة SITATURATE 0 1 0 هذا LT ؛ 0 1 1 count j 0 1 3 name ljava/lang/string ؛ // طريقة ثابتة LocalVariableTable: START طول فتحة SCILTATURE 0 101 0 args [ljava/lang/string ؛
لا يحفظ الجدول المتغير المحلي معلومات المعلمة فحسب ، بل يقوم أيضًا بتخزين المتغيرات المؤقتة التي يمكن استخدامها في الجسم بأكمله ، مثل int I ، وما إلى ذلك ، وكما هو موضح أعلاه ، فإن الطريقة والطريقة غير المنتظمة لها فرق بين هذا المتغير في الموضع الأول. لذلك ، يمكنك قراءة عدد المعلمات ( method.getParameterCount ) ، ثم قراءة معلومات المعلمة للرقم المحدد في الجدول المتغير المحلي وفقًا لتوقيع الطريقة.
تجدر الإشارة إلى أنه في الشكل أعلاه ، إذا كانت المعلمة طويلة أو مزدوجة ، فإن فتحتها تشغل مكانين. عند الحصول على معلومات المعلمة من خلال الفتحة ، يجب مراعاة معلومات نوع المعلمة.
نظرًا لأن طريقة الواجهة لا تحتوي على سمة رمز ، فلا يوجد جدول متغير محلي. إذا حصلت على تعريف طريقة الواجهة ، فلا يمكنك الحصول على اسم المعلمة المقابل من خلال الجدول المتغير المحلي.
MethodParameters جدول المعلمة
تم تقديم جدول المعلمة Method بعد 1.8 ، لذلك تتوفر هذه المعلومات فقط في ملفات الفئة التي تم تجميعها باستخدام JDK8. على عكس الجدول المتغير المحلي ، فإنه ينتمي إلى سمة MethodInfo ، أي أنه في نفس مستوى سمة الكود. سواء كانت طريقة واجهة أو طريقة عادية ، فهي تحتوي على هذه السمة. لذلك ، حتى طريقة الواجهة يمكن أن تحصل على معلومات المعلمة المقابلة.
بشكل افتراضي ، هذه المعلومات غير متوفرة في الفصل. يلزم إنشاء معلمة تجميع خاصة ، ولا يتم إنشاء هذه المعلومات افتراضيًا في Idea و Maven. في IDEA ، يجب إضافة معلمة التجميع هذه في معلمات خط Java الإضافية. في Maven ، يجب إضافة هذه المعلمة في المعلمة compilerArgs لـ Maven-Compiler-Plugin.
يظهر جدول المعلمة الطريقة في النموذج التالي بعد Javap:
// طريقة طريقة غير قاسية: اسم العدد الأسم
يمكن ملاحظة أنه سواء كانت ثابتة أم لا ، ستظهر فقط المعلومات المستخدمة لوصف المعلمات في جدول المعلمة. يتم استخدام معلمة Flags التالية في بعض السيناريوهات الخاصة ، مثل المعلمة final لإعادة كتابة الطريقة ، إلخ.
بعض الأدوات المتاحة
بالإضافة إلى استخدام مجموعات أدوات واجهات برمجة التطبيقات الأصلية وأدوات الربيع ، هناك أدوات أخرى يمكنها الحصول على معلومات اسم المعلمة. في نظام الربيع ، تكون الواجهة المستخدمة لوصف أسماء المعلمات هي ParameterNameDiscoverer . من خلال ذلك ، يمكن الحصول على معلومات اسم المعلمة المقابلة. بالإضافة إلى ذلك ، يمكن لـ Paranamer in com.thoughtworks.paranamer:paranamer Toolkit أيضًا معالجة المعلومات المقابلة. ومع ذلك ، فإن دعم MethodParameters JDK8 ليس مرتفعًا للغاية ، ويمكن للمستخدمين تحقيق أهدافهم الخاصة عن طريق تمديدها.
لخص
ما سبق هو طريقة الحصول على معلومات اسم المعلمة لرمز Java الذي تم تلخيصه من قبلك. آمل أن يساعدك ذلك في تعلم أو استخدام Java. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.