Java中在基元类型上实现类型安全的最高效方法



假设我想确保Java中基元类型的类型安全。为了举例,让我们想区分RatioAbsoluteValue,两者都由double表示。

据我所知,Java不支持类型同义词

所以我很有信心会涉及到一些开销。

从我的脑海中,我可以考虑定义包裹double(很多样板(的新caless,或者将Double子类化。。。或者可能还有其他选择?

哪种方法给我的性能开销最小?

编辑:我只限于Java8,所以这是这个问题的隐含基础;然而,如果在新版本的语言中有其他解决方案,我仍然很想听听。

我能想到的最具性能的方法是编写自己的包装器类,其中包含一些标记注释:

@PrimitiveTypeAlias(double.class)
public class Milliseconds
{
double value() { ... } 
}

然后在编译时挂接到注释处理器,并用它们的原始对应类(使用类似Lombok的东西(物理地替换包装类。

但我怀疑你可能暗示了"最有表现,也最努力":(

看一看Manifold框架(类似于Lombok,但更关心类型而不是样板简化(。@Extension方法或@Structural接口提供了实现"duck-type"的各种方法,其中涵盖了一些需求。不过,它不能直接用于原始字段。JIT可以在各种情况下优化一个非常基本的包装器类(当它落地时,它将能够使用Project Valhalla的inline修饰符(。

(我怀疑实现一级别名来补充Manifold现有的功能集是一个合理的功能请求。(

最新更新