使用主构造函数时的 Kotlin getter / setter

mic*_*ech 6 kotlin

该示例来自我正在做的 Kotlin 课程:

class Car {
    var speed: Int = 0
        get() = field 
        set(value) {
            field = value
        }
}
Run Code Online (Sandbox Code Playgroud)

如果我喜欢使用这样的主构造函数:

class Car(var speed: Int)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将如何编写 getter/setter?

Ani*_*ahu 14

您不能在构造函数中编写 getter/setter,您可以执行以下操作:

  1. 在类内部创建变量,其值取自构造函数。
class Car(speed: Int) {
    var speed = speed
        get() = field 
        set(value) {
            field = value
        }
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用@JvmField注解限制编译器不自动生成 getter/setter 并自己实现
class Car(@JvmField private var speed: Int) {
    fun getSpeed() = speed
    fun setSpeed(value: Int) { speed = value }
}
Run Code Online (Sandbox Code Playgroud)

  • 您需要一个私有支持字段,否则编译器会抱怨:“此处不允许初始化程序,因为此属性没有支持字段” (2认同)

And*_*ana 6

您可以使用构造函数中的值初始化您的属性:

class Car(speed: Int) {
    var speed: Int = speed
        get() = field
        set(value) {
            field = value
        }
}
Run Code Online (Sandbox Code Playgroud)