我搜索了如何执行srictfp在Scala中却找不到它的任何暗示网络。有一些人抱怨,但真正的解决方案无法找到。有一个错误追踪系统进入它这几乎是两岁。因为它似乎没有优雅修复了它我在寻找解决办法的途径。

我现在的想法是自己莫名其妙地设置在生成的字节码此时,相应的方法标记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")));

您将不得不找到一种方法来配置哪些类/方法需要被这样修改。

其他提示

Scala有一个strictfp注释现在:

@strictfp
def f() = …
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top