Java - 创建伪本机类型

时间:2018-02-22 22:29:21

标签: java inheritance operator-overloading typedef pass-by-value

在股票交易中,数量通常是整数(例如5倍股票,10倍期权等)。对于加密货币,数量是分数(例如0.01比特币)。在两种情况下,通常存在最小单位(例如,100倍份额的倍数)。

我想将此逻辑包装在Quantity类中。但是:

  • Java原生类型(例如double final ,因此我无法扩展它们
  • Java不支持运算符重载,因此算术会很难看
  • Java不支持typedef,因此我无法用double类型打包Quantity

所以我想我的问题是,如果我想创建类似于本机类型的东西(许多实例,按值传递,大量算术),是否有“经典”Java解决方案?从内存来看,C#有一个struct类型,它是值传递的,在Java中有类似的东西吗?

谢谢,

编辑:是否可以从C ++代码导入本机类型,并有效绕过Java?

1 个答案:

答案 0 :(得分:3)

是的,可以在Java中声明typedef,保证类型正确,但没有语法复杂性和声明新Java类的运行时开销。

作为用户,您可以通过编写类型注释并在编译时使用注释处理器来完成此操作。例如,您可以为数量编写@Quantity int,然后使用javac -processor QuantityProcessor MyFile.java进行编译。您可以对@Quantity int使用任何算术运算,如果您将常规int@Quantity int混合使用,或者如果有其他错误(例如值不存在),则编译器会发出警告在正确的范围内或不是100的倍数。

有人需要定义类型注释和注释处理器,并且因为您的要求是唯一的,您可能需要创建自己的。一个可以轻松创建类型注释和注释处理器的框架是Checker Framework。 (披露:我是开发人员。)

Checker Framework manual的以下部分可能特别有帮助。