2014-02-21 32 views
3

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在你的代碼中尋找這樣的東西?

回答

3

有Java代碼跳棋,最終將被擴展爲Kotlin代碼。

例如,IntelliJ中的IntelliJ將立即警告您這個問題。它是開源社區版的一部分,所以你可以自己嘗試。同時請注意,Kotlin爲您提供了一個優於Java的優勢:它在錯誤錯誤被引入時發生故障。很難通過許多Kotlin調用傳遞一個null,然後纔會失敗。在Kotlin中,大多數情況下會首先引入非法空值,導致運行時錯誤。