Kotlin屬性初始化
如果不想在一開(kāi)始就初始化一個(gè)屬性,那么你可以使用下面兩個(gè)關(guān)鍵字。
① lateinit
② lazy
lateinit
lateinit的意思是后面再初始化。
通常情況下,聲明為非null類型的屬性必須先初始化。但是,這在有些時(shí)候不是很方便。
要處理這種情況,可以使用lateinit修飾符修飾屬性。
例如:
public class Main{
lateinit var user:User
fun init(){
user=User()
}
fun do(){
user.eat()
}
}
a、lateinit只能用于var聲明的類變量,并且屬性沒(méi)有自定義getter或setter方法。
b、屬性的類型必須是非空的,并且不能是原始類型。
lazy
lazy的意思是惰性初始化。
lazy()是一個(gè)函數(shù),它接受一個(gè)lambda并返回一個(gè)lazy實(shí)例,它可以作為一個(gè)實(shí)現(xiàn)lazy屬性的委托:get()的第一個(gè)調(diào)用執(zhí)行傳遞給lazy()的lambda并記錄結(jié)果,隨后調(diào)用get()只返回記錄的結(jié)果。
例如:
public class User{
val name:String by lazy {"Android Coder"}
}
因此第一次調(diào)用和之后調(diào)用,name都會(huì)返回“Android Coder”
咱們?cè)撊绾稳ミx擇使用它們呢?
① lateinit var 可以從任何你能看到對(duì)象的地方初始化。如果你想你的屬性從外部被初始化,這時(shí)候可以使用lateinit。
② lazy只能用于val屬性,而lateinit只能應(yīng)用于變量。因?yàn)樗荒軕?yīng)用于final(val)字段,因此不能保證不可變性。