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

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

在我的一个Java项目中,我受到代码重复的困扰,这是由于Java处理(而不是)原语的方式。 再次手动将相同的更改复制到四个不同的位置( intlongfloatdouble之后第三次,我一次 又一次地逼近(?)来捕捉。

在各种形式中,这个问题现在已经提出,然后在StackOverflow:

  • 在Java中管理高度重复的代码和文档
  • 使用原始类型时如何避免重复?
  • 将基本动态列表传递给Java方法

共识似乎趋向于两种可能的替代方案:

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

那么第二个解决方案是我现在在做什么,而且我的理智慢慢变得危险,就像众所周知的折磨技术一样 。

自从提出了这些问题和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()方法。 这有点棘手:

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

对于所有数字盒装类型,怎么能支持这种方法,而不用写六到七次呢?

采纳答案:

如果我仍然想要一个原始的,我倾向于使用像“ long或“ double ”这样的“超级类型”。 性能通常非常接近,避免了许多变化。 BTW:64位JVM中的寄存器将全部为64位。

参考更多解答:由原始类型引起的代码重复:如何避免精神错乱?,转载请保留由原始类型引起的代码重复:如何避免精神错乱?

更多:java