【发布时间】:2017-01-08 08:12:49
【问题描述】:
strictfp 修饰符的作用是使接口声明中的所有浮点或双精度表达式都显式地为 FP-strict(第 15.4 节)。
这意味着接口中声明的所有嵌套类型都是隐式的 strictfp。
strictfp 修饰符的作用是使接口声明中的所有浮点或双精度表达式都显式地为 FP-strict(第 15.4 节)。
这意味着接口中声明的所有方法,以及接口中声明的所有嵌套类型,都是隐式的 strictfp。
从这两段来看,没有迹象表明strictfp 在实现/扩展使用strictfp 修饰符声明的接口/类时的行为。
经过搜索,我找到了一个很好的解释strictfp关键字Use the strictfp modifier for floating-point calculation consistency across platforms的用法,它指定:
扩展 FP-strict 超类的子类不会继承严格行为。当被覆盖的方法不是 FP-strict 时,覆盖方法可以独立选择是 FP-strict,反之亦然。
我在扩展使用strictfp 关键字声明的类时测试了strictfp 关键字的行为,这是真的:strictfp 行为不会被扩展类的类继承,但问题是在实现使用@ 声明的接口时987654332@ 关键字不正确:strictfp 行为不被实现接口的类继承。
谁能解释strictfp 的正确行为,实现/扩展使用strictfp 修饰符声明的接口/类?
【问题讨论】:
-
“我在扩展用 strictfp 关键字声明的类时测试了 strictfp 关键字的行为,这是真的:扩展类的类不会继承 strictfp 行为,”问题是 - 你是如何测试它的?我认为这是真的,因为(来自官方文档)整个类不会是 strictfp - 只有接口中的方法。无论如何 - 你是如何进行测试的?
-
在我看来这部分是错误的
All code in any class that implements the interface。这种继承会发生在编译时间还是加载时间?在其他情况下,关键字严格应用在一个.java源文件中,并且效果包含在一个或多个产品.class文件中。 -
@PiotrR 我对测试的意思是我执行了多个随机示例,这些示例涵盖了
strictfp与接口、方法、构造函数和类的多种用途,并在javap -c命令的帮助下能够调查生成代码的内容并查看strictfp的行为是否被实现和扩展类继承。 -
@TeemuIlmonen 是的,我认为这是真的,因为在实现使用
strictfp关键字声明的接口的类中找不到strictfp。
标签: java extends implements strictfp