12

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

class Car {
    var speed: Int = 0
        get() = field 
        set(value) {
            field = value
        }
}

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

class Car(var speed: Int)

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

4

4 回答 4

25

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

  1. 在类中创建变量,其值取自构造函数。
class Car(speed: Int) {
    var speed = speed
        get() = field 
        set(value) {
            field = value
        }
}
  1. 使用@JvmField注释来限制编译器不要自动生成 getter/setter 并自己实现一个
class Car(@JvmField private var speed: Int) {
    fun getSpeed() = speed
    fun setSpeed(value: Int) { speed = value }
}
于 2020-06-12T06:07:47.630 回答
7

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

class Car(speed: Int) {
    var speed: Int = speed
        get() = field
        set(value) {
            field = value
        }
}
于 2020-06-12T06:05:55.960 回答
1
于 2020-06-12T06:26:07.473 回答
0

If your Car is just a data holder, you could make it a data class, which generates a bunch of methods for you, see this example:

data class Car(var speed: Int)

You can use a parameterized constructor and the setters as follows

fun main() {
    // use a parameterized constructor
    var car = Car(240)
    println("${car.speed} km/h")

    // use the setter
    car.speed = 120
    println("${car.speed} km/h")
}

That would output:

240 km/h
120 km/h
于 2020-06-12T06:11:43.670 回答