gpt4 book ai didi

kotlin - 在 Kotlin 的数据类中声明字段的更好方法是什么?

转载 作者:行者123 更新时间:2023-12-02 13:23:26 25 4
gpt4 key购买 nike

假设我有一个数据类:

data class Money(private var _amount: Int, private val currency: String) {
private var amount: Int = _amount
get() {
return if (field < 0) 0 else field
}

override fun toString(): String {
return "Money(amount=$amount, currency='$currency')"
}

}

我想知道我应该传递什么作为参数:var 还是 val?我应该添加私有(private)修改吗?在哪种情况下是最佳实践?
因为当我添加一个 getter 时,我必须将其更改为 var,但据我所知,在 Kotlin 中编写 val 总是更好?

最佳答案

我想编写您提供的代码,如下所示:

data class Money(private var _amount: Int, private val currency: String) {
private var amount: Int
get() = _amount.coerceAtLeast(0)
set (value) { _amount = value }

override fun toString() = "Money(amount=$amount, currency='$currency')"
}
  • _amount可以只是一个参数,它不应该是一个字段,它会在构造后消失,并且只能在 init 中访问 block 、构造函数和字段变量初始化器(想象一下 Java 中的构造函数参数)。
  • coerceAtLeast是标准库中有用的实用程序扩展
  • 只有一个返回语句的方法可以写成一个线性
  • 数据类应该是纯数据类,我不认为你应该声明一个带有支持字段的属性。
  • 相反,使用私有(private)属性作为支持字段 并通过 getter 和 setter 改变支持字段,它们实际上是私有(private)字段的包装器。

  • 不太重要的是, amount 的类型可以推断,但我想在这里明确声明它,因为它对新人阅读更友好。

    关于kotlin - 在 Kotlin 的数据类中声明字段的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556087/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com