Kotlin - 即使存在init()函数,也必须初始化属性或抽象属性

Dan*_*ele 5 android initialization kotlin

我已经使用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)
}
Run Code Online (Sandbox Code Playgroud)

在第1行和第2行,我收到错误:

财产必须初始化或是抽象的

即使它将在init函数中初始化.

在写字:

internal var background: Drawable? = null
internal var xMark: Drawable? = null
Run Code Online (Sandbox Code Playgroud)

一个可行有效的解决方案?还有其他更好的方法吗?

Vin*_*rat 13

在使用之前lateinit,您必须了解这意味着什么.

您的变量未正确初始化.解决该问题的各种方法:

  • 初始化构造函数内部的变量或正确的init块(不是您声明的私有函数)
  • 在声明变量的同时初始化变量
  • 稍后初始化变量并让Kotlin知道(这是lateinit关键字)

这3个选项不等同,根据您的代码,前两个可能比第三个更合适.

lateinit 如果在实际初始化变量之前访问变量,将使您的应用程序崩溃.


hot*_*key 6

这些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)
}
Run Code Online (Sandbox Code Playgroud)