Java - 创建伪 native 类型

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

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

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

  • Java native 类型(例如 double)是 final,因此我无法扩展它们
  • Java不支持运算符重载,所以算术会很难看
  • Java 不支持 typedef,因此我无法使用 Quantity 类型包装 double

所以我想我的问题是这样的,如果我想创建类似于 native 类型的东西(大量实例、按值传递、大量算术),是否有“经典”Java 解决方案?根据我的内存,C# 有一个 struct 类型,它是按值传递的,Java 中有类似的东西吗?

谢谢,

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

最佳答案

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

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

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

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

关于Java - 创建伪 native 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938276/

相关文章:

c++ - 如何在过载时强制发出 "statement has no effect"警告==

c# - .NET泛型中重载运算符约束的解决方案

c++ - 为什么这里会出现这种歧义?

java - 你如何找到 0 和 1 的二维矩阵中的矩形数?

java - 使用 RecyclerView 制作类似目录的布局

java - 使用 Javassist 获取类中声明字段的索引以在字节码中使用

c++ - 派生类如何在编译时无法解析其基类的成员?

javascript - 类内javascript中两种函数声明的区别?

java - 我的 json 响应中的全屏 Activity 中未显示图像..?滑动的同时也

css - 垂直对齐链接框中的文本,否定继承的 CSS 属性