lateinit属性尚未初始化,我找不到初始化它的方法

时间:2018-11-24 21:40:30

标签: android kotlin

我在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) {}

1 个答案:

答案 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