本節將介紹 Kotlin 和 Java 互調過程當中封裝類、空值敏感以及靜態變量和靜態方法的處理java
首先看看如下代碼。安全
咱們用 Java 建立一個接口,以下:函數
以後咱們建立一個 A.java 實現這個接口,並在每一個方法中打印對應的類型,int 和 Integer。指針
最後,咱們在 Kotlin 代碼中調用它,咱們來看下它的執行結果:cdn
你會發現只調用了 int 參數的方法,經過這個示例能夠看出來 Kotlin 是沒有封裝類的概念的,爲了進一步說明,咱們讓 Kotlin 的類來實現這個接口:對象
你會發現編譯器會報方法名重複的錯誤,刪掉後正常blog
上述例子中若是非要調用 Integer 參數的方法,固然也是能作到的,能夠經過反射的方法。接口
仍是經過一個示例來講明,寫一個包含以下靜態方法的 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 中沒有靜態變量和靜態方法,咱們能夠經過上一節中提到的 object 關鍵字聲明的類來間接實現相似 Java 中的靜態方法。
若是讓其變成真正的靜態方法,能夠經過使用 @JvmStatic 註解使其變成 Java 的靜態方法,這時就能夠直接在 Java 類中調用。
以上就是本節內容,歡迎你們關注~