في C وC++، يمكنك طباعة اسم الوظيفة الحالية مثل هذا:
انسخ رمز الكود كما يلي:
printf("%s",__func__);
ولكن لا يوجد مثل هذا القول في Java، كل شيء هو كائن، ويجب الحصول عليه من كائن. هناك طريقتان:
الأول: الحصول عليه من خلال فئة Thread.
انسخ رمز الكود كما يلي:
System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
يتم الحصول على الطريقة الثانية من خلال فئة Throwable. ويمكن توسيع الطريقة الثانية، ويمكن لأي فئة فرعية من فئة Throwable تحقيق الوظيفة.
انسخ رمز الكود كما يلي:
System.out.println(new Throwable().getStackTrace()[0].getMethodName());
System.out.println(new Throwable().getStackTrace()[0].getClassName());
من خلال هاتين الطريقتين يمكن طباعة اسم الطريقة الحالية واسم الفئة، ولكن هناك عيب: الفهرس التالي:
انسخ رمز الكود كما يلي:
getStackTrace ()[الفهرس]
ما هي القيمة التي يجب أخذها، 0 أو 1 أو أي قيم أخرى؟ هنا يتم كتابة فهارس الطريقتين على شكل 0 و1 على التوالي، فقط لتذكير نفسك بأنها ليست ثابتة ويجب تحديدها بنفسك من خلال الاختبار. يقال أن القيمة قد تكون مختلفة اعتمادًا على إصدار JDK. لكن لم أختبره بنفسي.
إصدار JDK الذي استخدمته للاختبار: إصدار Java "1.7.0_17"