小编典典

由原始类型引起的代码重复:如何避免精神错乱?

java

在我的一个Java项目中,由于Java处理(而非)原语的方式,我受到代码重复的困扰。不必后手动复制到四个不同的位置相同的变化(intlongfloatdouble
再次 ,对于 第三次 的时候, 再次 我来到非常接近(?)来抢购。

共识似乎收敛到两个可能的选择:

  • 使用某种代码生成器。
  • 你能做什么? 这就是生活!

嗯,第二种 解决方案
是我现在正在做的事情,并且它对我的理智逐渐变得危险,就像众所周知的酷刑技术一样

自问这些问题和Java 7诞生以来已经过去了两年。因此,我希望有一个更简单和/或更标准的解决方案。

  • Java 7是否有任何更改可以缓解这种情况下的 压力 ?我在简明的变更摘要中找不到任何内容,但也许某个地方有一些晦涩的新功能?

  • 尽管可以选择源代码生成,但我更喜欢使用标准JDK功能集支持的解决方案。当然,可以使用cpp或其他代码生成器来工作,但会添加更多依赖项,并且需要更改构建系统。

似乎由JDK支持的唯一种类的代码生成系统是通过注释机制。我设想了一个处理器,它将像这样扩展源代码:

    @Primitives({ "int", "long", "float", "double" })
@PrimitiveVariable
int max(@PrimitiveVariable int a, @PrimitiveVariable int b) {
    return (a > b)?a:b;
}

理想的输出文件将包含此方法的四个请求的变体,最好包含相关的Javadoc注释等。是否存在注释处理器来处理这种情况?如果没有,建造一个将需要什么?

  • 也许最近又出现了其他一些花样?

编辑:

重要说明:除非有理由,否则我不会使用原始类型。即使在现在,在某些应用程序中使用盒装类型也会对​​性能和内存产生非常实际的影响。

编辑2:

使用max()作为一个例子允许使用的compareTo()是在所有的数字boxed类型可用的方法。这有点棘手:

int sum(int a, int b) {
    return a + b;
}

在不实际编写六到七次的情况下,如何能支持所有数字盒装类型的此方法?


阅读 215

收藏
2020-10-18

共1个答案

小编典典

我倾向于使用“超级类型”,例如,long或者double仍然需要原始类型。性能通常非常接近,并且避免了产生很多变化。顺便说一句:64位JVM中的寄存器无论如何都将是64位的。

2020-10-18