package myfirst
import kotlin.reflect.KProperty
class A {
var index=0
var oldValue:Int=1
var newValue:Int by this.oldValue//新值通过旧值改变来赋值,设置旧值得属性构造器
private operator fun Int.setValue(a: A, property: KProperty<*>, oldValue: Int) {
println(">>>>index:${index}")//set设置器,在下次赋值时起作用,不赋值仍然取旧值
a.oldValue=7//总是这样,oldValue=xxx//这样会产生新值
//理解,先执行get,然后by,最后set
index+=1
}
private operator fun Int.getValue(a: A, property: KProperty<*>): Int {
println("<<<<<<index:${index}")
index+=1
return a.oldValue//返回旧值
//理解,先执行get,然后by,最后set
}
}
fun main(args: Array<String>) {
var a=A()
a.oldValue=999999
println(a.newValue)
}