该示例来自我正在做的科特林课程:
class Car {
var speed: Int = 0
get() = field
set(value) {
field = value
}
}
如果我想使用像这样的主要构造函数:
class Car(var speed: Int)
在这种情况下,我将如何编写getter / setter方法?
答案 0 :(得分:5)
您可以使用构造函数中的值初始化属性:
class Car(speed: Int) {
var speed: Int = speed
get() = field
set(value) {
field = value
}
}
答案 1 :(得分:2)
您不能在构造函数内部编写getter / setter,可以执行以下操作:
class Car(speed: Int) {
var speed = speed
get() = field
set(value) {
field = value
}
}
@JvmField
注释限制编译器不要自动生成getter / setter并自行实现class Car(@JvmField private var speed: Int) {
fun getSpeed() = speed
fun setSpeed(value: Int) { speed = value }
}
答案 2 :(得分:2)
如果您的Car
只是数据持有者,则可以将其设置为data class
,这会为您生成许多方法,请参见以下示例:
data class Car(var speed: Int)
您可以按以下方式使用参数化的构造函数和setters
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")
}
这将输出:
240 km/h
120 km/h
答案 3 :(得分:1)
财产的语法–
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
在这里,属性初始值设定项,getter和setter是可选的。如果可以从初始化程序中推断出属性类型,我们也可以省略它。 只读或不可变的属性声明的语法与可变的声明有两种不同: 以val而不是var开头,并且不允许使用setter。
在kotlin中,val
仅用于读取方式的吸气剂,而var
仅用于getter()
和setter()
class Company {
var name: String = "Defaultvalue"
}
上面的代码等同于下面的代码
class Company {
var name: String = "defaultvalue"
get() = field // getter
set(value) { field = value } // setter
}
如果您想在data class
类中保存数据,也可以使用kotlin Car
。因此,您无需定义getter和setter。
data class Car(var speed: Int)
有关更多信息,请检查https://kotlinlang.org/docs/reference/properties.html#getters-and-setters