Kotlin在編譯時使用分隔符「可空?」時有明顯的空檢查。和「notnullable」對象。它有一個KAnnotator來幫助確定來自Java的對象是否爲nullabale。但是,如果不可空類的某些部分發生了變化呢?Java將kotlin類的內容修改爲空
想想看,我們有一隻貓,它肯定有一頭可以咀嚼的頭。
package org.cat
class CatHead(){
fun mew(){
println("Mew")
}
}
class Cat(){
var head = CatHead()
fun mew(){
head.mew()
}
}
fun main(args:Array<String>){
val cat = Cat()
cat.mew()
}
現在讓我們加入到這個美麗的畫面一個JAVA貓狂(CatManiac.java),誰切斷一個貓的頭,因爲他得到:
當我們問貓喵,它與它的頭監測和預警系統import org.cat.*;
public class CatManiac {
public static void cutCatHead(Cat cat){
cat.setHead(null);
}
}
所以如果我們把一隻貓傳給瘋子,他肯定會割下它的頭。貓咪怎麼說沒有頭腦的話?
fun main(args:Array<String>){
val cat = Cat()
CatManiac.cutCatHead(cat)
cat.mew()
}
我們在點進去,因爲空的科特林,一個運行錯誤調用cat.mew():
Exception in thread "main" java.lang.IllegalArgumentException".
我相信這是一個很常見的問題,我們可以得到同時在Kotlin中使用Java庫。有沒有任何方法或任何計劃警告/與之鬥爭?
P.S.像KAnnotator在你的代碼中尋找這樣的東西?