属性&字段


定义

关键字

  1. val (只读)
  2. 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

本节完

results matching ""

    No results matching ""