9

我在网上搜索了如何srictfp在 Scala 中执行,但找不到任何提示。有人抱怨它,但找不到真正的解决方案。有一个关于它的bugtracker 条目已经有将近两年的历史了。在我寻找解决方法的过程中,似乎没有优雅的解决方法。

我目前的想法是我自己以某种方式在生成的字节码中设置适当的方法标志ACC_STRICT,但我不知道这样做的最佳解决方案是什么。想到一个 Scala 编译器插件,或者只是在十六进制编辑器中修改标志。也许有人面临同样的挑战,可以告诉我他或她的解决方案吗?

4

2 回答 2

6

您可以在构建过程中添加一个后处理器,将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")));

然后,您必须找到一种方法来配置需要以这种方式修改哪些类/方法。

于 2010-10-27T17:02:55.020 回答
1

Scalastrictfp现在有一个注解:

@strictfp
def f() = …
于 2015-03-15T23:04:40.283 回答