我的 Kotlin 活动中有 lateinit 属性,这是它的简化版本:
class CreateNewListOfQuestions : AppCompatActivity() {
lateinit var questionAnswerListOfObjects: ArrayList<QuestionAnswerObject>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_create_new_list_of_questions)
save.setOnClickListener {
questionAnswerListOfObjects.add(0, QuestionAnswerObject("question", "answer", 1))
}
}
}
Run Code Online (Sandbox Code Playgroud)
主要问题是当我生成移动应用程序并按“保存”按钮时,应用程序停止工作。Logcat 显示此错误:“lateinit 属性 questionAnswerListOfObjects 尚未初始化”
我尝试了很多方法来初始化它,但这些方法对我没有帮助。我应该如何正确初始化它?我想将这个类的许多对象添加到 ArrayList 中:
class QuestionAnswerObject(var question: String, var answer: String, var probability: Int=100) {}
Run Code Online (Sandbox Code Playgroud)
这取决于你想要什么。
例如,如果您需要的一切都在使用,ArrayList<QuestionAnswerObject>您lateinit根本不需要:
var questionAnswerListOfObjects = ArrayList<QuestionAnswerObject>()
Run Code Online (Sandbox Code Playgroud)
就足够了
如果您想Bundle从其他东西中获取或从其他东西中获取 - 您必须在使用前对其进行初始化。
基本上lateinit关键字仅用于说“嘿,编译器,我有一个变量,它尚未初始化,但我保证它会在我使用之前进行初始化,因此请将其标记为不可为空的字段”。
因此,如果您真的想使用lateinit,只需提前初始化该属性,例如在后面添加setContentView
questionAnswerListOfObjects = ArrayList<QuestionAnswerObject>()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4083 次 |
| 最近记录: |