关键字(lateinit)详解
lateinit(延迟初始化)
延迟初始化属性:Kotlin要求非空类型的属性必须要在构造方法中进行初始化。有时这种要求不太方便,比如可以通过依赖注入或是单元测试情况下进行属性的赋值。
通过lateinit关键字满足以下条件
- lateinit只能用在类体中声明的var属性上,不能用在primary constructor声明的属性上
- 属性不能拥有自定义的setter与getter
- 属性类型需要为非空,且不能是原生数据类型(Int,Float)
class Person{
lateinit var name:String //此处换成Int原生数据类型会报错
fun init(){
this.name="张三"
}
fun print() {
println(this.name)
}
}
fun main(args: Array<String>) {
var person=Person()
person.init()
person.print()
}
infix(中缀符号)
通过infix关键字满足以下条件
- 是成员函数或是扩展函数
- 拥有单个参数
- 声明时使用infix关键字
class InfixTest(private var a:Int){
infix fun add(b:Int)=this.a + b
}
fun main(args: Array<String>) {
val infixTest =InfixTest(2)
println(infixTest.add(5))
println(infixTest add 5) //以上2种是等价的
}