Kotlin – 属性必须被初始化或者是抽象的,即使有一个init()函数
我已经使用Android Studio 3.0将此代码从Java转换为Kotlin
internal var background: Drawable internal var xMark: Drawable private fun init() { background = ColorDrawable(Color.RED) xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete) }
在第1和第2行,我收到错误:
财产必须被初始化或是抽象的
即使它将在init函数中初始化。
在写字:
internal var background: Drawable? = null internal var xMark: Drawable? = null
一个可行和有效的解决方案? 还有其他更好的方法吗?
在使用lateinit
之前,你必须明白这是什么意思。
您的变量未正确初始化。 解决这个问题的各种方法:
- 初始化构造函数中的变量
- 在声明变量的同时初始化变量
- 稍后初始化变量,让Kotlin知道(这是
lateinit
关键字)
这3个选项是不相同的,根据你的代码,两个第一个可能比第三个更合适。
如果在实际初始化之前访问变量,则lateinit
会使应用程序崩溃。
init
块不是函数,只是删除private fun
部分和括号:
internal var background: Drawable internal var xMark: Drawable init { background = ColorDrawable(Color.RED) xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete) }
你需要lateinit
关键字。 检查文档 。