我正在为我的应用程序构建一个组件,我开始更频繁地使用init函数而不是构造函数,但现在奇怪的事情正在发生。如果我在init函数中调用函数来初始化list,它会在该列表中抛出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()
}发布于 2021-04-13 09:20:50
来自官方文档的这一节: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()
}https://stackoverflow.com/questions/67071941
复制相似问题