快速上手 Kotlin 開發系列之與 Java 互調 (1)

學習完基礎語法之後,我們來學習下 Java 和 Kotlin 互相調用的問題

本節將介紹 Kotlin 與 Java 之間的語法變化

Kotlin 文件中的函數

首先讓大家感到非常不適應的一點是,Kotlin 的函數居然可以直接寫在文件中,而不用寫在類中,但如果你知道 Kotlin 的代碼編譯以後依舊是 JVM 平臺的一個 class,這一點應該就很好理解了。 例如,我們在 Utils.kt 中寫如下函數:

快速上手 Kotlin 開發系列之與 Java 互調 (1)

在 Java 的類中可以做如下的調用:

快速上手 Kotlin 開發系列之與 Java 互調 (1)

從調用可以看出,Kotlin 文件中的函數編譯後直接轉換為對應文件名 + Kt 類中以 public static 開頭的方法。

object 關鍵字

還有一種 Kotlin 中特殊的語法,object + 類聲明,這種寫法是在 Kotlin 中創建一個匿名內部類的寫法:

快速上手 Kotlin 開發系列之與 Java 互調 (1)

如果在 Kotlin 代碼中則可以直接調用:

快速上手 Kotlin 開發系列之與 Java 互調 (1)

如果在 Java 代碼調用,需要使用以下方法:

快速上手 Kotlin 開發系列之與 Java 互調 (1)

簡單分析下,其實構造方法變成了私有方法,暴露了一個靜態的當前實例 INSTANCE ,通過它我們可以訪問到其中的方法。

通過 Java 代碼調用我們能夠看出, object 關鍵字的類其實是 Kotlin 單例的一種寫法。

Class 和 KClass

使用 Java 時我們有的時候傳遞某個類的 class,但是在 Kotlin 中調用 Java 類的 class 需要在後面追加 .java,例如我們有一個 JavaMain.java 的 Java 類,我們使用它的 class 時則需要這樣調用:JavaMain::class.java。

快速上手 Kotlin 開發系列之與 Java 互調 (1)

為什麼會有這樣的特殊語法呢?這是因為 Kotlin 的 class 和 Java 的 class 格式是不一致的。 在 Kotlin 中,所有的類並不是編譯成 Class,而是編譯成 KClass,例如:

快速上手 Kotlin 開發系列之與 Java 互調 (1)

與 Java 在關鍵字上的衝突

例如在 Java 類中有一個變量 in :

快速上手 Kotlin 開發系列之與 Java 互調 (1)

而 in 在 Kotlin 中是一個關鍵字,如果在 Kotlin 中調用就會報錯

快速上手 Kotlin 開發系列之與 Java 互調 (1)

正確調用方法應該是將該變量使用兩個反引號包裹(`)

快速上手 Kotlin 開發系列之與 Java 互調 (1)

以上就是本節內容,歡迎大家關注~


分享到:


相關文章: