سؤال

عند العمل مع فئات Java الحالية، غالبا ما أحصل على تحذيرات انعكاس إذا قمت بشيء غير صحيح، E.G.

غير شرعي حقل مطابق موجود: يحصل للفئة java.lang.string clojure.lang.reflector.getinstancefield. (عاكس java:271)

هو عباءة القيام بالتفكير في وقت التشغيل لكل استدعاء من الطرق المعينة؟أم أن هذا مخزنة في أي نوع من الطرق؟هل ستستفيد هناك سرعة لتحريك أي نوع من تشارك Java-interop في فئة Java ذات صلة؟

هل كانت مفيدة؟

المحلول

Clojure ستقوم بالتفكير في وقت التشغيل فقط إذا لم يتمكن من استنتاج الطريقة الدقيقة للاتصال بناء على السياق المحيط، وإلا فإنه ينبعث رمز سيتصل الطريقة مباشرة.يمكنك استخدام تلميحات النوع لتزويد الترجمة مع هذا السياق إذا لزم الأمر.على سبيل المثال:

giveacodicetagpre.

ستستخدم الوظيفة الأولى التفكير في كل مرة يتم الاحتجاج بها؛والثاني لديه أداء مماثل لرمز جافا الأصلي.

نصائح أخرى

هذا ليس تحذيرا انعكاس، فهو مجرد إشارة إلى أنه كان يستخدم انعكاس.

يمكنك استخدام تلميحات النوع للقضاء على الانعكاس.علم الأجيال كما هو موضح في الرابط أعلاه (خاطئ افتراضي)، اختياريا تحذيرات الانعكاس.

أجد أنه من المريح لاستخدام الأداة المساعدة LeiningeDicetAgcode للأداة المساعدة، والتي تحاول ترجمة كل ملف عباءة في مشروعك، مع تحول تحذيرات الانعكاس.سيؤدي ذلك إلى الإبلاغ عن مشكلات الانعكاس في التعليمات البرمجية الخاصة بك، أو في أي رمز محمل من المكتبات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top