我正在为我的应用程序构建一个组件,并且开始更频繁地使用init函数而不是构造函数,但现在发生了奇怪的事情。如果我在函数内部调用init函数来初始化列表,它会抛出NullPointerException该列表。函数是否init在特定类中初始化变量之前执行?
异常被抛出removeAllViews。
代码:
init {
createViews()
}
private var viewList = mutableListOf<ViewGroup>()
private fun createViews(){
removeAllViews()
list.forEach { addItem(it) }
changeViewsState(true)
}
private fun removeAllViews(){
parent.removeAllViews()
viewList.clear()
}
Run Code Online (Sandbox Code Playgroud)
从本节获取官方文档:https://kotlinlang.org/docs/classes.html#constructors
在实例初始化期间,初始化程序块按照它们在类主体中出现的顺序执行,并与属性初始化程序交错。
因此,您应该将变量声明放在init:
private var viewList = mutableListOf<ViewGroup>()
init {
createViews()
}
private fun createViews(){
removeAllViews()
list.forEach { addItem(it) }
changeViewsState(true)
}
private fun removeAllViews(){
parent.removeAllViews()
viewList.clear()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2419 次 |
| 最近记录: |