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!

推薦閱讀: