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关键字。 检查文档 。