Kotlin修飾符lateinit(延遲初始化)案例詳解
- Kotlin定義變量一般有如下寫法
lateinit var name: String var age: String? = null
那麼用lateinit 修飾和下面那種有什麼區別呢,我們來看一下這兩行代碼反編譯成java代碼是什麼樣子的。
@NotNull public String name; @Nullable private String age; @NotNull public final String getName() { String var10000 = this.name; if (this.name == null) { Intrinsics.throwUninitializedPropertyAccessException("name"); } return var10000; } public final void setName(@NotNull String var1) { Intrinsics.checkParameterIsNotNull(var1, "<set-?>"); this.name = var1; } @Nullable public final String getAge() { return this.age; } public final void setAge(@Nullable String var1) { this.age = var1; }
可以看到在 name 屬性添加瞭 @NotNull註解,並且在getName和setName方法中進行瞭非空判斷
而 age 屬性添加瞭 @Nullable
當我們調用name的時候,會拋出異常
println(AddStr().name)
Exception in thread “main” kotlin.UninitializedPropertyAccessException: lateinit property name has not been initialized
當輸出age屬性的時候則輸出 null
- lateinit 不能用來修飾基本數據類型,因為基本類型的屬性在類加載後的準備階段都會被初始化為默認值
- lateinit不能修飾val變量,隻能修飾可變的屬性
到此這篇關於Kotlin修飾符lateinit(延遲初始化)案例詳解的文章就介紹到這瞭,更多相關Kotlin修飾符lateinit(延遲初始化)內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!