基元类型导致的代码重复:如何避免疯狂?
在我的一个Java项目中,由于Java处理(不是)原语的方式,我被代码重复所困扰。在不得不再次手动将相同的更改复制到四个不同的位置(,,,)之后,第三次,我一次又一次地非常接近(?)捕捉。int
long
float
double
以各种形式,这个问题在StackOverflow上不时被提出:
共识似乎趋同于两种可能的替代方案:
- 使用某种代码生成器。
- 你能做些什么?C'est la vie!
好吧,第二个解决方案是我现在正在做的事情,它对我的理智来说正在慢慢变得危险,就像众所周知的酷刑技术一样。
自从这些问题被问到以来已经过去了两年,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注释e.t.c。是否有某个地方的注释处理器来处理这种情况?如果没有,建造一个需要什么?
也许最近出现了其他一些技巧?
编辑:
重要提示:除非我有理由,否则我不会使用基元类型。即使是现在,在某些应用程序中使用盒装类型也会对性能和内存产生非常实际的影响。
编辑2:
用作示例允许使用在所有数字框类型中可用的方法。这有点棘手:max()
compareTo()
int sum(int a, int b) {
return a + b;
}
如何才能为所有数字盒装类型支持此方法,而无需实际编写六到七次?