在我的一个Java项目中,由于Java处理(而非)原语的方式,我受到代码重复的困扰。不必后手动复制到四个不同的位置相同的变化(int,long,float,double) 再次 ,对于 第三次 的时候, 再 和 再次 我来到非常接近(?)来抢购。
int
long
float
double
共识似乎收敛到两个可能的选择:
嗯,第二种 解决方案 是我现在正在做的事情,并且它对我的理智逐渐变得危险,就像众所周知的酷刑技术一样。
自问这些问题和Java 7诞生以来已经过去了两年。因此,我希望有一个更简单和/或更标准的解决方案。
Java 7是否有任何更改可以缓解这种情况下的 压力 ?我在简明的变更摘要中找不到任何内容,但也许某个地方有一些晦涩的新功能?
尽管可以选择源代码生成,但我更喜欢使用标准JDK功能集支持的解决方案。当然,可以使用cpp或其他代码生成器来工作,但会添加更多依赖项,并且需要更改构建系统。
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类型可用的方法。这有点棘手:
max()
compareTo()
int sum(int a, int b) { return a + b; }
在不实际编写六到七次的情况下,如何能支持所有数字盒装类型的此方法?
我倾向于使用“超级类型”,例如,long或者double仍然需要原始类型。性能通常非常接近,并且避免了产生很多变化。顺便说一句:64位JVM中的寄存器无论如何都将是64位的。