Kotlin 初始化陷阱。初始化注意事项
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 初始化陷阱。初始化注意事项相关的知识,希望对你有一定的参考价值。
一 注意属性与init中的调用顺序
class Player6()
init
val bloodBonus = blood.times(4)
val blood = 100;
fun main()
像java的静态代码块。和成员变量的顺序是可以这样的
但是在kotlin中不行。因为Kotlin是根据代码顺序进行初始化的
编译成字节码就会是这样
顺便证明了。init的执行地方是构造方法初始化后。。
可行的初始化为如此
class Player6()
val blood = 100;
init
val bloodBonus = blood.times(4)
fun main()
反编译字节码如下
陷阱二
class Player7()
val name: String
private fun firstLetter() = name[0];
init
println(firstLetter())
name = "Jack";
fun main()
Player7()
这个没啥好说的有一看就看出来
陷阱3
class Player8(_name: String)
val palyerName: String = initPlayerName()
val name: String = _name;
private fun initPlayerName() = name;
fun main()
println(Player8("Jack").palyerName)
这个也很明显
赋值的时候他本身就是null
可以看字节码他是如何运行的
先执行方法 执行的时候他是null。所以最终返回null
正确写法呢
class Player8(_name: String)
val name: String = _name;
val palyerName: String = initPlayerName()
private fun initPlayerName() = name;
fun main()
println(Player8("Jack").palyerName)
放在java上面就没有这样的问题。所以kotlin需要注意这些
以上是关于Kotlin 初始化陷阱。初始化注意事项的主要内容,如果未能解决你的问题,请参考以下文章