我已使用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
一种可行且有效的解决方案?还有其他更好的方法吗?
答案 0 :(得分:10)
在使用lateinit
之前,您必须了解这意味着什么。
您的变量未正确初始化。解决这个问题的各种方法:
init
块(不是您声明的私有函数)lateinit
关键字)这3个选项并不相同,根据您的代码,前两个可能比第三个更合适。
如果您在变量实际初始化之前访问变量, lateinit
会使您的应用崩溃。
答案 1 :(得分:4)
init
blocks不是函数,只需删除private fun
部分和括号:
internal var background: Drawable
internal var xMark: Drawable
init {
background = ColorDrawable(Color.RED)
xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete)
}
答案 2 :(得分:0)
您需要lateinit
关键字。检查the docs。