關鍵字(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種是等價的
}