Java-创建伪本机类型
在股票交易中,数量通常是整数(例如5倍股票、10倍期权等)。对于加密货币,数量是分数(例如0.01比特币)。在这两种情况下,通常都有一个最小单位(例如,100倍股份的倍数) 我想把这个逻辑封装在Java-创建伪本机类型,java,inheritance,operator-overloading,typedef,pass-by-value,Java,Inheritance,Operator Overloading,Typedef,Pass By Value,在股票交易中,数量通常是整数(例如5倍股票、10倍期权等)。对于加密货币,数量是分数(例如0.01比特币)。在这两种情况下,通常都有一个最小单位(例如,100倍股份的倍数) 我想把这个逻辑封装在Quantity类中。然而: Java本机类型(例如,double)是final,因此我无法扩展它们 Java不支持运算符重载,因此算术将很难看 Java不支持typedefs,所以我不能用Quantity类型包装double 所以我想我的问题是,如果我想创建类似于本机类型的东西(大量实例、传递值、大
Quantity
类中。然而:
- Java本机类型(例如,
)是double
,因此我无法扩展它们final
- Java不支持运算符重载,因此算术将很难看
- Java不支持typedefs,所以我不能用
类型包装Quantity
double
struct
类型,Java中有类似的东西吗
谢谢,
< >编辑:是否可以从C++代码导入本地类型,并有效绕过java?< /p> < p>是的,可以在爪哇中声明Type Debug,并保证类型正确性,但没有声明新java类的语法复杂性和运行时开销。 作为用户,您可以通过编写类型注释并在编译时使用注释处理器来实现这一点。例如,您将为数量编写
@Quantity int
,并使用javac-processor QuantityProcessor MyFile.java
进行编译。您可以对@Quantity int
使用任何算术运算,如果将常规int
s与@Quantity int
s混合,或者存在其他错误,例如值不在正确范围内或不是100的倍数,编译器将发出警告
需要有人定义类型注释和注释处理器,因为您的需求是唯一的,所以您可能需要创建自己的。使创建类型注释和注释处理器变得容易的一个框架是。(披露:我是一名开发商。)
本手册的以下部分可能特别有用
@Quantity int
,并使用javac-processor QuantityProcessor MyFile.java
进行编译。您可以对@Quantity int
使用任何算术运算,如果将常规int
s与@Quantity int
s混合,或者存在其他错误,例如值不在正确范围内或不是100的倍数,编译器将发出警告
需要有人定义类型注释和注释处理器,因为您的需求是唯一的,所以您可能需要创建自己的。使创建类型注释和注释处理器变得容易的一个框架是。(披露:我是一名开发商。)
本手册的以下部分可能特别有用
double
,您应该使用BigDecimal
,它已经存在您正在讨论的问题,这是一种内置类型。以类似的方式学习并实现你的Quantity
类。BigDecimal
是朝着正确方向迈出的一步,但这还不足以达到我的目的。我需要更详细的逻辑。因为我需要扩展它,所以我正在寻找一个解决方案,该解决方案也将处理上述问题。但是您可以使用scala,编写自己的dsl,并与Java进行良好的交互。谢谢Elliott,这意味着在scala中重写现有的代码库,还是某种互操作?是的。至于你的编辑,当然。您可以使用JNA。准备编写更多的代码。您仍然不会有运算符重载或typedef。您不应该对currency使用double
,您应该使用BigDecimal
,它已经存在您正在讨论的问题,这是一种内置类型。以类似的方式学习并实现你的Quantity
类。BigDecimal
是朝着正确方向迈出的一步,但这还不足以达到我的目的。我需要更详细的逻辑。因为我需要扩展它,所以我正在寻找一个解决方案,它也将处理上述问题。我认为这是我们将要得到的解决方案:)我认为这是我们将要得到的解决方案:)