【发布时间】:2020-02-25 13:30:39
【问题描述】:
假设我想确保 Java 中原始类型的类型安全。为了举例,让我们想区分Ratio 和AbsoluteValue,两者都由double 表示。
据我所知,Java 不支持类型同义词。
所以我很有信心会涉及一些开销。
从我的脑海中,我可以想到要么定义包装 double 的新类(很多样板文件),或者子类化 Double... 或者甚至还有其他选项?
哪种方法给我的性能开销最小?
编辑:我仅限于 Java 8,所以这是问题的隐含基础;但是,如果在新版本的语言中有替代解决方案,我仍然很想知道它们。
【问题讨论】:
-
好吧,你不能子类 Double,它是最终的。如果必须,您可以创建自定义包装类。
-
对性能影响最小的是基于类型注释的解决方案,因为它根本不会影响运行时行为。事实上,即使是 Java 编译器也会忽略它们,因此您需要集成一个注释处理器来强制执行
@Ratio double不能从@AbsoluteValue double分配的规则。我不知道是否有现成的解决方案,比如配置现有的检查工具来添加该规则。 Treatingintlikeenum是使用带有语义的原始类型的相关示例。
标签: java java-8 boxing type-safety type-alias