سؤال

أنا من محبي ثابت metaprogramming في C++.أنا أعرف جافا الآن الوراثة.هل هذا يعني أن ساكنة metaprogramming (أي ترجمة-وقت تنفيذ البرنامج) ممكن في جافا ؟ إذا كان الأمر كذلك, يمكن لأي شخص أن يوصي أي موارد جيدة حيث يمكنك معرفة المزيد عن ذلك ؟

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

المحلول

لا, هذا غير ممكن.الأدوية ليست قوية مثل قوالب.على سبيل المثال, قالب يمكن أن يكون حجة نوع معرف من قبل المستخدم, نوع بدائي ، أو القيمة ؛ ولكن قالب عام حجة يمكن أن يكون إلا Object أو فرعي منه.

تحرير:هذا الجواب ؛ منذ عام 2011 لدينا جافا 7 ، والتي قد الشروح التي يمكن استخدامها لمثل هذا الخداع.

نصائح أخرى

نلقي نظرة على Clojure.إنها لثغة مع وحدات الماكرو (meta-البرمجة) الذي يعمل على JVM جدا للتشغيل المتبادل مع جافا.

ماذا يعني بالضبط قبل "ثابت metaprogramming"?نعم, C++ قالب metaprogramming من المستحيل في جاوة ، لكن له طرق أخرى ، أقوى بكثير من تلك التي من C++:

  • انعكاس
  • الجانب المنحى البرمجة (@AspectJ)
  • بايت كود التلاعب (Javassist, ObjectWeb ASM, جافا وكلاء)
  • رمز جيل (الشرح أداة معالجة قالب تحب محركات السرعة)
  • جملة مجردة شجرة التلاعب (واجهات برمجة التطبيقات التي توفرها شعبية ايديس)
  • إمكانية تشغيل المحول البرمجي Java و استخدام التعليمات البرمجية المترجمة حتى في وقت التشغيل

ليس هناك أفضل طريقة:كل من هذه الطرق لها نقاط القوة والضعف.بسبب مرونة JVM كل تلك الأساليب في جافا يمكن استخدامها على حد سواء في تجميع الوقت وقت التشغيل.

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

أفضل طريقة للقيام metaprogamming في جاوة هو الالتفاف نوع المحو و اليد في Class<T> كائن من نوع T.لا يزال, هذا هو فقط الإختراق.

لا الأدوية في جاوة هو محض وسيلة لتجنب صب من وجوه.

إذا كنت بحاجة قوية وقت التحويل البرمجي المنطق جافا, طريقة واحدة للقيام بذلك هي مع نوع من التعليمات البرمجية جيل.وبما ملصقات أخرى قد أشار إلى أن لغة جافا لا تقدم أي ميزات مناسبة لممارسة وقت التحويل البرمجي المنطق, هذا قد يكون هو الخيار الأفضل (iff كنت حقا بحاجة إلى وقت التحويل البرمجي المنطق).مرة واحدة كنت قد استنفدت إمكانيات أخرى و أنت متأكد كنت تريد أن تفعل رمز الجيل, كنت قد تكون مهتمة في مشروع مفتوح المصدر Rjava ، متاح على:

http://www.github.com/blak3mill3r

هو كود جافا جيل مكتبة كتب في روبي التي كتبت من أجل توليد Google Web Toolkit واجهات روبي على القضبان التطبيقات تلقائيا.فقد ثبت أنه مفيد جدا من أجل ذلك.

بمثابة تحذير ، فإنه يمكن أن يكون من الصعب جدا تصحيح Rjava رمز Rjava لا تفعل الكثير التحقق ، فإنه يفترض فقط كنت تعرف ما تفعلونه.هذا الى حد كبير حالة ثابتة metaprogramming على أي حال.انا اقول انها أسهل بكثير التصحيح من أي شيء غير تافهة مع C++ TMP, ومن الممكن استخدام نفس النوع من الأشياء.

على أي حال, إذا كنت تفكر في كتابة البرنامج الذي مخرجات جافا شفرة المصدر ، توقف الآن و تحقق Rjava.قد لا تفعل ما تريد حتى الآن, لكنه MIT مرخصة, لذا لا تتردد في تحسين ذلك تقلى أو بيعه إلى جدتك.سأكون سعيدا أن يكون المشروعات الإنمائية الأخرى الذين هم من ذوي الخبرة مع البرمجة العامة التعليق على التصميم.

لومبوك يقدم الشكل الضعيف من وقت الترجمة metaprogramming.بيد أن التقنية التي يستخدمونها تماما العامة.

انظر جافا كود تحويل في وقت الترجمة من أجل مناقشة متصلة

أنا لست متأكدا من أنني أفهم ميزة ثابتة الفوقية البرمجة.

في جافا ، يمكن أن تعكس العثور على معلومات حول الفئات الخاصة بك وتفعل كل الأشياء الفوقية البرمجة ستفعل عليك القيام بها داخل التعليمات البرمجية الخاصة بك دون إضافة جملة جديدة و طرق مختلفة في التفكير.الشروح هي أيضا قادرة على القيام ببعض الفوقية مهام البرمجة بطريقة أكثر تنظيما.

أنا يمكن أن أكون مخطئا في هذا ، وأنا أفكر جديا في افتتاح سؤال على ذلك لأنني لست متأكدا من أنني أفهم.يبدو ثابت الفوقية البرمجة هو أنيق الإختراق الذي يحصل حول حقيقة أن بعض اللغات لا تبقي الكثير من تجميع المعلومات المتاحة في وقت التشغيل (واحدة من النقاط القوية جافا من اللغات الديناميكية).

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

على مشعب المشروع يقدم نوع آمن ثابت metaprogramming جافا.يمكنك استخدامه لبناء أنواع حيوي في وقت التحويل البرمجي كما Javac يحل اكتب أسماء.على سلمان مخطط تجريبي يوضح ثابت metaprogramming من حيث ديناميكية وقت التحويل البرمجي نوع الإسقاط (أي رمز جيل بناء الخطوات).

بالإضافة إلى ذلك يمكنك استخدام متعددة لإضافة ميزات جديدة.تحقق من هيكلية الكتابة, طريقة امتداد, ، نوع آمن انعكاس. .

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