Kotlin?—? lateinit vs lazy

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)字段,因此不能保證不可變性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容