数据 class 由 lateinit 属性 取消初始化

data class uniinitialize by lateinit property

当我尝试初始化数据时 class 出现错误,kotlin.UninitializedPropertyAccessException:lateinit 属性 article_ 尚未初始化。我该如何解决这个错误以及初始化数据的方法 class.

型号class

data class Article(
    val id: Int,
    val author: String,
    val content: String,
    val description: String?)

主要活动

class TestActivity : AppCompatActivity() {
    lateinit var binding: ActivityTestBinding
    lateinit var article_: List<Article>

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_test)

val mainAdapter = MainAdapter(article_)
        binding.recView.apply {
            this.layoutManager = LinearLayoutManager(this@TestActivity)
            this.adapter = mainAdapter
        }
}
}

答案:

在这一行 val mainAdapter = MainAdapter(article_) 之前的 onCreate() 中,只需通过写入 article_ = ArrayList() 来初始化 article_,错误就会消失。

错误原因

您遇到此错误是因为您需要在使用前初始化 lateinit 变量 article_,而您没有这样做。

如果要检查变量是否已初始化,请使用 ::article_.isInitialized.

有什么不明白的地方尽管问。

像这样更改代码 binding = DataBindingUtil.setContentView(this,R.layout.activity_test) article_ = ArrayList()

lateinit 仅当您有特定原因不在构造时初始化变量时才应使用。在这里我看不出有什么理由不去做

var article_: List<Article> = listOf()

或者也许

val article_: MutableList<Article> = mutableListOf()

并首先保证这种错误不会发生。