科特林:如何构造

问题描述:

访问性能考虑跟进类:科特林:如何构造

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

该类的主体是从上到下执行的。如果你想要的东西的属性初始化后运行一段代码,就应该下放置:

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