2014-10-20 137 views
1

訪問性能考慮跟進類:科特林:如何構造

class Test() { 
    init { 
     log(foo) 
    } 

    val foo = "Bar" 
} 

當我instatiate測試它產生一個NullPointerException,因爲富似乎並沒有被初始化。這種行爲實際上是否打算?有沒有解決方法?

+0

注意,當前科特林需要初始化模塊現在有在他們面前的'init'關鍵字。這個問題中的語法已經過時了。 – 2015-12-31 00:59:57

+0

已更新語法 – 2015-12-31 12:28:31

回答

5

該類的主體是從上到下執行的。如果你想要的東西的屬性初始化後運行一段代碼,就應該下放置:

class Test() { 
    val foo = "Bar" 

    init { 
     log(foo) 
    } 
} 
+0

Andrey,感謝您的回答。我的問題是編譯器不允許我將構造函數放在委託屬性後面,因爲它認爲該塊是作爲參數傳遞的lambda表達式。我想你可以在財產後面放一個分號來防止這種情況發生。標記爲正確的答案。 – 2014-10-20 15:08:18

+0

注意:由@Andrey添加的';'不需要在當前Kotlin中分離初始化塊,而是在塊前添加關鍵字'init'。這個答案應該更新爲當前的Kotlin。 – 2015-12-31 00:59:20

+0

更新了語法 – 2015-12-31 12:28:54