Java-创建伪本机类型

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 所以我想我的问题是,如果我想创建类似于本机类型的东西(大量实例、传递值、大

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

我想把这个逻辑封装在
Quantity
类中。然而:

  • Java本机类型(例如,
    double
    )是
    final
    ,因此我无法扩展它们
  • Java不支持运算符重载,因此算术将很难看
  • Java不支持typedefs,所以我不能用
    Quantity
    类型包装
    double
所以我想我的问题是,如果我想创建类似于本机类型的东西(大量实例、传递值、大量算法),有“经典”Java解决方案吗?从内存来看,C#有一个按值传递的
struct
类型,Java中有类似的东西吗

谢谢,


< >编辑:是否可以从C++代码导入本地类型,并有效绕过java?< /p> < p>是的,可以在爪哇中声明Type Debug,并保证类型正确性,但没有声明新java类的语法复杂性和运行时开销。 作为用户,您可以通过编写类型注释并在编译时使用注释处理器来实现这一点。例如,您将为数量编写
@Quantity int
,并使用
javac-processor QuantityProcessor MyFile.java
进行编译。您可以对
@Quantity int
使用任何算术运算,如果将常规
int
s与
@Quantity int
s混合,或者存在其他错误,例如值不在正确范围内或不是100的倍数,编译器将发出警告

需要有人定义类型注释和注释处理器,因为您的需求是唯一的,所以您可能需要创建自己的。使创建类型注释和注释处理器变得容易的一个框架是。(披露:我是一名开发商。)

本手册的以下部分可能特别有用


是的,可以在Java中声明typedefs,并保证类型正确性,但不需要声明新Java类的语法复杂性和运行时开销

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

需要有人定义类型注释和注释处理器,因为您的需求是唯一的,所以您可能需要创建自己的。使创建类型注释和注释处理器变得容易的一个框架是。(披露:我是一名开发商。)

本手册的以下部分可能特别有用


没有。但是您可以使用scala,编写自己的dsl,并与Java进行良好的交互。谢谢Elliott,这意味着要在scala中重写现有的代码库,还是某种互操作?是的。至于你的编辑,当然。您可以使用JNA。准备编写更多的代码。您仍然不会有运算符重载或typedef。您不应该对currency使用
double
,您应该使用
BigDecimal
,它已经存在您正在讨论的问题,这是一种内置类型。以类似的方式学习并实现你的
Quantity
类。
BigDecimal
是朝着正确方向迈出的一步,但这还不足以达到我的目的。我需要更详细的逻辑。因为我需要扩展它,所以我正在寻找一个解决方案,该解决方案也将处理上述问题。但是您可以使用scala,编写自己的dsl,并与Java进行良好的交互。谢谢Elliott,这意味着在scala中重写现有的代码库,还是某种互操作?是的。至于你的编辑,当然。您可以使用JNA。准备编写更多的代码。您仍然不会有运算符重载或typedef。您不应该对currency使用
double
,您应该使用
BigDecimal
,它已经存在您正在讨论的问题,这是一种内置类型。以类似的方式学习并实现你的
Quantity
类。
BigDecimal
是朝着正确方向迈出的一步,但这还不足以达到我的目的。我需要更详细的逻辑。因为我需要扩展它,所以我正在寻找一个解决方案,它也将处理上述问题。我认为这是我们将要得到的解决方案:)我认为这是我们将要得到的解决方案:)