gpt4 book ai didi

android - kotlin 延迟初始化属性无法在 init block 中修改

转载 作者:行者123 更新时间:2023-12-02 12:40:11 33 4
gpt4 key购买 nike

我的类中有一些属性是延迟初始化的。我希望它们是不可变的,这就是为什么我不使用 lateinit 并且我不希望它们可以为空,所以我认为惰性是这里最好的选择。

在我的类的 init block 中,我想修改其中一个属性,但它给了我编译错误:必须初始化变量“mLstQuestions”。< br/>我知道惰性属性在使用后立即初始化,那么为什么会发生这种情况呢?我怎样才能解决这个问题?更好的方法是什么?

如果我创建一个函数Initialize()并在该函数中修改它。完全没问题,我可以在 init block 中调用它。为什么呢?这工作正常吗?有什么不同?如果在 init block 中禁止执行类似的操作,那么函数调用是否也应该被禁止?

这是我的代码:

class CharacterListView(
inflater: LayoutInflater,
parent: ViewGroup
) {
init {
mLstQuestions.adapter = mQuestionsListAdapter
// error : Variable 'mLstQuestions' must be initialized
// error : Variable 'mQuestionsListAdapter' must be initialized
}

private val mLstQuestions by lazy { findViewById<RecyclerView>(R.id.char_list) }
private val mQuestionsListAdapter by lazy { QuestionsListAdapter(getContext(), this) }
private val mRootView by lazy { inflater.inflate(R.layout.activity_main, parent, false) }
...
}

这是带有初始化函数的代码:

class CharacterListView(
inflater: LayoutInflater,
parent: ViewGroup
) {
init { initialize() } // no errors!

private fun initialize() {
mLstQuestions?.adapter = mQuestionsListAdapter
}

private val mLstQuestions by lazy { findViewById<RecyclerView>(R.id.char_list) }
private val mQuestionsListAdapter by lazy { QuestionsListAdapter(getContext(), this) }
private val mRootView by lazy { inflater.inflate(R.layout.activity_main, parent, false) }
...
}

最佳答案

请尝试在变量的声明之后定义init{ } block 。

class CharacterListView(
inflater: LayoutInflater,
parent: ViewGroup
) {
private val mLstQuestions by lazy { findViewById<RecyclerView>(R.id.char_list) }
private val mQuestionsListAdapter by lazy { QuestionsListAdapter(getContext(), this) }
private val mRootView by lazy { inflater.inflate(R.layout.activity_main, parent, false) }

init {
mLstQuestions.adapter = mQuestionsListAdapter
}
}

关于android - kotlin 延迟初始化属性无法在 init block 中修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62773938/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com