Kotlin跟Java是百分百兼容的,換言之,也就是它們倆是可以互操作的,也就是Java可以調Kotlin,Koltin可以調Java,所以下面來看一下在Kotlin中如何來調用Java代碼:
咱們來看一下這個ArrayList是Kotlin的么?
接下來往里面添加一些元素,並進行遍歷:
接下來還可以用跟Java一樣閉開區間的方式來遍歷,如下:
接下來咱們准備新建一個純Java的類,然后在Kotlin中訪問該Java類,如下:
接下來我們在Kotlin怎么來實例化該JavaBean呢?其實跟我們寫純Kotlin的代碼木啥區別:
好,接下來調用它里面的setter和getter方法,此時就得是Kotlin的方式了,而不是像Java直接去調,如下:
所以賦值如下:
接下來則是給boolean的成員變量賦值,按着Kotlin的習慣,會用is開頭來對其進行賦值,如下:
接下來就可以取出數據了:
雖說在Kotlin中去調用Java是比較簡單,但是由於Kotlin的語法跟Java的語法還是有不少的差別的,所以下面來介紹一些要注意的一些小細節:
1、在Java中,所有引用都可能為null,然而在Kotlin中,對null是有着嚴格的檢查與限制的,這就使得某個來自於Java的引用在Kotlin中變得不再適合;基於這個原因,在Kotlin中,將來自於Java的聲明類型稱為平台類型(Platform Types)。對於這種類型(平台類型)來說,Kotlin的null檢查就會得到一定的緩和,變得不再那么嚴格了。這樣就使得空安全的語義要求變得與Java一致。當我們調用平台類型引用的方法時,Kotlin就不會在編譯期間施加空安全的檢查,使得編譯可以正常通過;但是在運行期間則有可能拋出異常,因為平台類型引用值有可能為null。
下面用程序來驗證一下:
目前這塊肯定運行都正常,但是注意:
試試:
其中:
注意:我們沒有能力能將任何一個類型給指定為平台類型,這個是Kotlin系統內置的。
接下來繼續看代碼:
其實是:
另外這里需要注意一個細節:
如果我們使用了不可空類型,編譯器會在賦值時生成一個斷言,這會防止Kotlin的不可空變量持有null值;同樣,這一點也適用於Kotlin方法參數傳遞,我們在將一個平台類型值傳遞給方法的一個不可空參數時,也會生成一個斷言。總體來說,Kotlin會竭盡所能防止null的賦值蔓延到程序的其他地方,而是在發生問題之處就立刻通過斷言來解決。