我想创造一个存钱的价值阶级。我需要存储私人货币格式。下面是我的代码:
@JvmInline
value class Money internal constructor(val rawValue: String) {
private val format: MoneyFormat = MoneyFormat.WHOLE
我检索错误:
值类不能具有带支持字段的属性
但另一方面,如果你看一下Kotlin.time.Duration的实现,你可以在那里找到属性storageUnit
。而且据我所知,有必要存储当前的持续时间单位。
我如何保存类中的格式,以便添加可以将货币从一种格式转换为另一种格式的方法?
1条答案
按热度按时间00jrzges1#
内联/值类的全部意义在于,在内部我们不示例化类的对象,而是直接使用它的单个值(至少在可能的情况下)。在你的例子中,这意味着我们不想传递
Money
对象,而是直接传递字符串。我们不能在字符串对象中存储这个额外的format
值,所以我们不能添加这样的属性。Duration.storageUnit
不同:它不会在对象中存储任何额外的数据。每当我们访问
storageUnit
属性时,它都会动态计算所需的值并返回它。它不储存在任何地方。看看你的例子,我想你也想这样做:
请注意
get()
。这与原始代码不同。您的代码在示例化对象时创建一个字段并存储MoneyFormat.WHOLE
。在添加get()
之后,没有创建任何字段,只有getter和getter返回MoneyFormat.WHOLE
。