سؤال
لقد بحثت على الويب عن كيفية تطبيقها srictfp
في سكالا ولكن لم يستطع العثور على أي تلميح منه. هناك بعض الأشخاص الذين يشكون من ذلك ، ولكن لا يمكن العثور على حلول حقيقية. هناك إدخال Bugtracker حول هذا الموضوع ما يقرب من عامين. كما يبدو أنه لا يوجد حل أنيق له على الطريق الذي أبحث عنه عن الحلول.
فكرتي الحالية هي تعيين علامة طريقة Appropiate ACC_STRICT
في رمز Bytecode الذي تم إنشاؤه بنفسي بطريقة أو بأخرى ، لكن ليس لدي أي فكرة عما سيكون أفضل حل للقيام بذلك. يتبادر إلى الذهن المكون الإضافي لبرنامج التحويل البرمجي Scala أو مجرد اختراق أعلام في محرر Hex. ربما واجه شخص ما نفس التحدي ويمكن أن يخبرني حله؟
المحلول
يمكنك إضافة مرحلة ما بعد المعالج في عملية البناء الخاصة بك من شأنها إضافة strictfp
المعدل للفئة التي تم إنشاؤها (أي تعيين ACC_STRICT
العلم كما تقول).
يمكنك تنفيذ مثل هذا المعالج باستخدام جافاسيست فمثلا. هذا يمكن أن يبدو هكذا:
CtClass clazz = ClassPool.getDefault().makeClass(
new FileInputStream("old/HelloWorld.class"));
CtMethod method = clazz.getDeclaredMethod("testMethod");
method.setModifiers(method.getModifiers() | Modifier.STRICT);
clazz.detach();
clazz.toBytecode(new DataOutputStream(new FileOutputStream(
"new/HelloWorld.class")));
يجب عليك بعد ذلك إيجاد طريقة لتكوين الفئات/الطريقة التي يجب تعديلها بهذه الطريقة.
نصائح أخرى
سكالا لديها strictfp
التعليق التوضيحي الآن:
@strictfp
def f() = …