属性&字段
定义
关键字
- val (只读)
- var ()
实现略
Getter&Setter
一般情况时默认的, 不需要自己实现,但是如果想搞点特别的东西,请看下面
var a = 1
var h: Int
get() = a
set(value) {
a = value
}
fun BaseMain() {
println("h=$h and a = $a")
h = 2
println("end h = $h and a = $a")
}
BaseMain()
/**打印
h=1 and a = 1
end h = 2 and a = 2
*/
可以看出,相当于一个类,隐藏了方法,当方法调用时,方法体的东西也跟着改变了
- backing field
主要用在getter setter 里面,其他情况不行,就上面的情况,我们想直接调用属性本身是行不通的
var num: Int
get() = num
set(value) {
num = value
}
如果你在kotlin中这样定义,那么恭喜你,你有得到了一个错误,因为num=value 和setNum(value)是等价的,就相当于不断的递归调用,会报错,正确姿势如下,但是这样玩有什么意思呢。
var num: Int = 0
get() = field
set(value) {
field = value
}
常数
可以在文件或者class中定义
就普通变量var 变为 const val
const val TYPE = 1000
晚初始化
关键字lateinit
本节完