Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

Kotlin Object 實作

Kotlin 的 Object 關鍵字

可以讓我們很快的建立起一個 singleton 物件

object DoAuth {
	val isAuth = true
    fun takeParams(username: String, password: String) {  
        println("input Auth parameters = $username:$password")  
    }  
}

並且能夠用簡潔的語法對該物件進行存取

fun main() {
    DoAuth.isAuth
    DoAuth.takeParams("foo", "qwerty")
}

不過,Kotlin 的 object 底層是怎麼實作的呢?

查看 object 實作

要知道 object 背後的實作方式是什麼

我們可以將編譯出來的 bytecode

進行反編譯後查看

將剛剛的程式反編譯後,我們可以看到結果

public final class DoAuth {
   @NotNull
   public static final DoAuth INSTANCE = new DoAuth();
   private static final boolean isAuth = true;

   private DoAuth() {
   }
   public final boolean isAuth() {
      return isAuth;
   }

我們可以看到,利用將建構子設置成 private

就可以讓 DoAuth 實作 singleton pattern

另外我們也會發現

利用宣告成 static 的 INSTANCE 變數和 isAuth

可以讓其他程式取用時更加方便

參考 main 反編譯之後的結果

   public static final void main() {
      DoAuth.INSTANCE.isAuth();
      DoAuth.INSTANCE.takeParams("foo", "qwerty");
   }

綜合以上兩段程式,我們就能知道

Kotlin 如何在 jvm 並不知道什麼是 object 的狀況下

實作出 jvm 能夠理解的 singleton 物件

並能夠簡易的存取該物件裡面的內容