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