بيان المشكلة:
هل يمكن استخدام انعكاس جافا لاسترداد أسماء المتغيرات المعلنة محليا؟ بالنظر إلى مقتطف التعليمات البرمجية مثل:
Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo();
هل يمكننا تطوير طريقة تحدد أسماء المتغيرات، مثل:
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(***); // Placeholder for variable name access } }
الحل:
حتى Java 8، لم يكن استرداد أسماء المتغيرات المحلية عبر الانعكاس ممكنًا. ومع ذلك، تم تقديم الدعم الجزئي في هذا الإصدار. أصبحت أسماء المعلمات، وهي نوع متخصص من المتغيرات المحلية، متاحة من خلال التفكير. وقد ثبت أن هذا مفيد في استبدال التعليقات التوضيحية مثل @ParameterName، والتي يتم استخدامها بشكل شائع في أطر عمل حقن التبعية.للحصول على معلومات أكثر شمولاً عن اسم المتغير المحلي، قد يقدم فحص ملفات الفصل بعض الأفكار. أثناء التجميع، تقوم تقنيات التحسين أحيانًا بإزالة هذه البيانات للحفاظ على المساحة. ومع ذلك، إذا كانت موجودة، فإن سمة جدول المتغيرات المحلية الخاصة بالطريقة تسرد أنواع المتغيرات وأسماءها ضمن نطاقات التعليمات الخاصة بها.
من المحتمل أن توفر أدوات هندسة Bytecode مثل ASM آليات لفحص هذه المعلومات في وقت التشغيل. ونظرًا للتطبيق المتخصص لهذه القدرة في المقام الأول في بيئات التطوير، فإن هذه المكتبات توفر إمكانات تكميلية تتجاوز مجرد استخراج أسماء المتغيرات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3