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

本節將介紹 Kotlin 和 Java 互調過程當中封裝類、空值敏感以及靜態變量和靜態方法的處理java

Kotlin 沒有封裝類

首先看看如下代碼。安全

咱們用 Java 建立一個接口,以下:函數

以後咱們建立一個 A.java 實現這個接口,並在每一個方法中打印對應的類型,int 和 Integer。指針

最後,咱們在 Kotlin 代碼中調用它,咱們來看下它的執行結果:cdn

你會發現只調用了 int 參數的方法,經過這個示例能夠看出來 Kotlin 是沒有封裝類的概念的,爲了進一步說明,咱們讓 Kotlin 的類來實現這個接口:對象

你會發現編譯器會報方法名重複的錯誤,刪掉後正常blog

上述例子中若是非要調用 Integer 參數的方法,固然也是能作到的,能夠經過反射的方法。接口

Kotlin 空值敏感

仍是經過一個示例來講明,寫一個包含以下靜態方法的 Java 類:編譯器

以後在 Kotlin 代碼中調用這個方法,其中賦值方式有三種,分別是讓編譯器推斷、賦值給不爲空的 String 類型以及賦值給可爲空的 String? 類型。it

首先看第一種編譯器推斷類型的方式,當咱們使用編譯器查看類型時你會發現它返回的是 String! 的類型,這種類型咱們不能直接聲明,這是 Kotlin 與 Java 互調時的一種特有的類型,也能夠說成是 Java 的 String 類型。

以後咱們執行 main 函數,看到代碼 10 行位置報錯,說明爲空的值給不可爲空的 String 類型賦值會報錯!

當咱們註釋掉 fmt2 代碼繼續執行,你會發現編譯器會正常編譯經過,難道這就說明第 一、3 種方式是可靠的呢?咱們嘗試調用 fmt1 的某個方法:

發現會報 NullPointerException 錯誤。爲何會這樣呢? 由於 String! 類型 Kotlin 編譯器會認爲這是兼容類型,你只能是臨時地使用,可是若是你調用它的話,就會像 Java 同樣去執行,因此就報了 Java 的空指針異常。

反觀 fmt3 就不會報錯,這就是 Kotlin 的空安全!

【注】當咱們調用 Java 的方法返回類對象的時候,若是你不肯定返回值是否可能爲空,你必定要賦值給一個可空類型,這樣才能利用 Kotlin 的空安全!

Kotlin 沒有靜態變量與靜態方法

因爲 Kotlin 中沒有靜態變量和靜態方法,咱們能夠經過上一節中提到的 object 關鍵字聲明的類來間接實現相似 Java 中的靜態方法。

若是讓其變成真正的靜態方法,能夠經過使用 @JvmStatic 註解使其變成 Java 的靜態方法,這時就能夠直接在 Java 類中調用。

以上就是本節內容,歡迎你們關注~

長按關注
相關文章
相關標籤/搜索