数据 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()
并首先保证这种错误不会发生。
当我尝试初始化数据时 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()
并首先保证这种错误不会发生。