我在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))
}
}
}
主要问题是,当我生成移动应用程序并按“保存”按钮时,应用程序停止工作。 Logcat显示此错误:“ lateinit属性questionAnswerListOfObjects尚未初始化”
我尝试了许多初始化它的方法,但是这些方法对我没有帮助。我应该如何正确初始化它? 我希望将此类的许多对象添加到ArrayList中:
class QuestionAnswerObject(var question: String, var answer: String, var probability: Int=100) {}
答案 0 :(得分:4)
这取决于您想要的东西。
例如,如果您所需的一切都在使用const pdf = require('fs').readFileSync('5mb.pdf');
socket.compress(true).send(pdf);
,则根本不需要ArrayList<QuestionAnswerObject>
:
lateinit
足够了
如果您想从var questionAnswerListOfObjects = ArrayList<QuestionAnswerObject>()
或其他地方获取-您必须在使用之前对其进行初始化。
基本上,Bundle
关键字仅用于表示“嘿,编译器,我有一个变量,尚未初始化,但是我保证它将在使用前被初始化,因此请将其标记为不可为空字段”。
因此,如果您真的想使用lateinit
,只需更早地初始化该属性,例如在lateinit
之后添加
setContentView