关于val 和var 的区别(反编译查看其类的属性特征)
class TheStudent(id : Int, name : String){
// val是只读属性
val age:Int
get() = 26
// var默人有get和set方法,返回域(构造器上)
var id : Int = id
get() {
println("wo get le ")
return field
}
set(value) {
println("wo set le ")
field = value
}
//var 属性的默认写法
var name : String = name
}
fun main(args: Array<String>) {
val student = TheStudent(666, "lbw")
//通过get方法得到age和id
println(student.age)
println(student.id)
//通过set方法set id
student.id = 55
//通过get方法得到id
println(student.id)
}
output:
26
wo get le
666
wo set le
wo get le
55
反编译TheStudent.class结果
延迟初始化属性的作用
class LateClass{
//延迟初始化属性,声明在类体中的var属性,不能是原生
// 数据类型,不能用在primary构造器上,为了方便与Spring整合
lateinit var name:String
fun init() {
this.name = "haha"
}
fun print() {
println(this.name)
}
}
fun main(args: Array<String>) {
val lateClass = LateClass()
lateClass.init()
lateClass.print()
}
output:
haha
注意,print之前的init必不可少。