我在网上搜索了如何srictfp在Scala中强制执行但却找不到任何暗示.有些人抱怨它,但找不到真正的解决方案.有一个关于它的bugtracker条目,差不多两年了.因为它似乎没有优雅的解决方案,我正在寻找解决方法.
我目前的想法是以ACC_STRICT某种方式在我生成的字节码中设置适当的方法标志,但我不知道这样做的最佳解决方案是什么.在十六进制编辑器中出现Scala编译器插件或者只是黑客标记.也许有人面临同样的挑战,可以告诉我他或她的解决方案?
您可以在构建过程中添加一个后处理器,将strictfp修改器添加到生成的类中(即ACC_STRICT按照您的说法设置标志).
例如,您可以使用Javassist实现这样的后处理器.这看起来像这样:
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")));
Run Code Online (Sandbox Code Playgroud)
然后,您必须找到一种方法来配置需要以这种方式修改的类/方法.