1.属性
- 示例代码
/**
* var propertyName:propertyType = initializer
* getter()...
* setter()...
* backing field,支撑字段(域)
* backing property,支撑属性
*/
class ThePerson(address: String, name: String) {
val age: Int
get() = 20
var address: String = address
get() {
println("get invoked")
return field
}
set(value) {
println("set invoke")
field = value
}
var name: String = name
}
fun main(args: Array<String>) {
var person = ThePerson("shanghai", "zhangsan");
println(person.age)
person.address = "tianjin"
println(person.address)
println(person.name)
person.name = "lisi"
println(person.name)
}
- 运行结果
20
set invoke
get invoked
tianjin
zhangsan
lisi
2.延迟初始化属性
延迟初始化属性
Kotlin要求非空类型的属性必须要在构造方法中进行初始化
有时,这种要求不太方便,比如可以通过依赖注入或者单元测试情况下进行属性的赋值。
通过lateinit关键字标识属性为延迟初始化,需要满足如下3个条件:
1.lateinit只能用在类体中声明的var属性上,不能用在parimary constructor声明的属性上
2.属性不能拥有自定义的setter与getter
3.属性类型需要为非空,且不能是原生数据类型
- 示例代码
class TheClass {
lateinit var name: String
fun init() {
this.name = "zhangsan"
}
fun print() {
println(this.name)
}
}
fun main(args: Array<String>) {
var theClass = TheClass();
theClass.init()
theClass.print()
}
- 运行结果
zhangsan