使用 strictfp 修饰符声明的 Java class 无法通过 Modifier.isStrict(int) 进行测试
Java class declared with strictfp modifier fails test with Modifier.isStrict(int)
需要说明的是,这个问题完全是假设性的。就我个人而言,现实世界不需要这种行为;无意中发现的
灵感来自:How to make a (static) initializer block strictfp?
如果我用 strictfp
修饰符声明 Java class:
public strictfp class PublicStrictfpClass
{
public double f() { return 2d / 3d; }
}
... 然后我使用 Modifier.isStrict(int)
:
进行测试
public static void main(String[] argArr)
{
if (! Modifier.isStrict(PublicStrictfpClass.class.getModifiers()))
{
throw new IllegalStateException("Unreachable code");
}
}
以上代码失败:方法 main()
抛出 IllegalStateException
。我尝试了 class 声明 和 没有方法 PublicStrictfpClass.f()
- 都失败了。
我是不是误会了...?
- 在 class 声明中使用
strictfp
修饰符?
- 方法
Modifier.isStrict(int)
?
我是 运行 来自 Linux 的代码,使用的是 OpenJDK 8 的最新补丁。
最后,我在问这个问题之前做了一堆谷歌搜索。关键字strictfp
在野外非常罕见!
这可能是因为 class modifiers in the class file do not include the strictfp
(don't know why, must ask Java developers). This is what the getModifiers()
method looks into, its documentation 声明:“修饰符由 Java 虚拟机的 public
、protected
、private
、final
、static
、abstract
和 interface
”。(所以没有提及 strictfp
)
您仍然可以获得f
方法的修饰符。方法修饰符确实包括 strictfp
:
Modifier.isStrict(PublicStrictfpClass.class.getMethod("f").getModifiers())
需要说明的是,这个问题完全是假设性的。就我个人而言,现实世界不需要这种行为;无意中发现的
灵感来自:How to make a (static) initializer block strictfp?
如果我用 strictfp
修饰符声明 Java class:
public strictfp class PublicStrictfpClass
{
public double f() { return 2d / 3d; }
}
... 然后我使用 Modifier.isStrict(int)
:
public static void main(String[] argArr)
{
if (! Modifier.isStrict(PublicStrictfpClass.class.getModifiers()))
{
throw new IllegalStateException("Unreachable code");
}
}
以上代码失败:方法 main()
抛出 IllegalStateException
。我尝试了 class 声明 和 没有方法 PublicStrictfpClass.f()
- 都失败了。
我是不是误会了...?
- 在 class 声明中使用
strictfp
修饰符? - 方法
Modifier.isStrict(int)
?
我是 运行 来自 Linux 的代码,使用的是 OpenJDK 8 的最新补丁。
最后,我在问这个问题之前做了一堆谷歌搜索。关键字strictfp
在野外非常罕见!
这可能是因为 class modifiers in the class file do not include the strictfp
(don't know why, must ask Java developers). This is what the getModifiers()
method looks into, its documentation 声明:“修饰符由 Java 虚拟机的 public
、protected
、private
、final
、static
、abstract
和 interface
”。(所以没有提及 strictfp
)
您仍然可以获得f
方法的修饰符。方法修饰符确实包括 strictfp
:
Modifier.isStrict(PublicStrictfpClass.class.getMethod("f").getModifiers())