先看下自定义setter怎么写:
var name: String = ""
set(value) {
setEnglishName(value) //设置name值时,也创建enName
field = value
}
测试一下:
fun main() {
var test = SetterTest()
println(test)
test.name = "bella"
println(test)
}
class SetterTest {
var name: String = ""
set(value) {
setEnglishName(value) //设置name值时,也创建enName
field = value
}
var isGirl: Boolean = false
var enName = ""
fun setEnglishName(parm: String) {
enName = parm
}
override fun toString(): String {
return "SetterTest(name='$name', isGirl=$isGirl, enName='$enName')"
}
init {
name = "Linda"
isGirl = true
}
}
运行结果:
自定义的setter什么时候被调用?
只要变量被赋值,就会自动调用setter。上面的代码,在init{}
中name = "Linda"
,就会调用name的setter;之后test.name = "bella"
,也会调用setter。