【发布时间】:2018-02-22 22:29:20
【问题描述】:
在股票交易中,数量通常是整数(例如 5 倍股票、10 倍期权等)。对于加密货币,数量是分数(例如 0.01 比特币)。在这两种情况下,通常都有一个最小单位(例如 100 倍股份的倍数)。
我想将此逻辑包装在 Quantity 类中。然而:
- Java 原生类型(例如
double)是final,所以我无法扩展它们 - Java 不支持运算符重载,所以算术会很丑
- Java 不支持 typedef,所以我不能用
Quantity类型包装double
所以我想我的问题是,如果我想创建类似于原生类型的东西(大量实例、按值传递、大量算术),是否有“经典”Java 解决方案?根据记忆,C# 有一个 struct 类型,它是按值传递的,Java 中是否有类似的东西?
谢谢,
编辑:是否可以从 C++ 代码中导入本机类型,并有效地绕过 Java?
【问题讨论】:
-
没有。但是你可以使用 scala,编写自己的 dsl 并与 Java 交互就好了。
-
谢谢 Elliott,这是否意味着重写 scala 中的现有代码库,或者某种互操作?
-
是的。至于你的编辑,当然。您可以使用 JNA。准备编写更多代码。而且您仍然不会有运算符重载或 typedef。
-
无论如何你都不应该使用
double作为货币,你应该使用BigDecimal,它已经有你在谈论的问题,这是一个内置类型。向BigDecimal学习,并以类似的方式实现您的Quantity类。 -
BigDecimal是朝着正确方向迈出的一步,但对于我的目的来说还不够。我需要更详细的逻辑。由于我需要对其进行扩展,因此我正在寻找一种能够同时处理上述问题的解决方案。
标签: java inheritance operator-overloading typedef pass-by-value