在可空的接收器类型的arraylist上只允许安全或非空的assserted调用

时间:2017-10-30 11:45:26

标签: android kotlin kotlin-null-safety

刚开始使用kotlin进行android开发。我的arraylist就是这样声明的 -

var day1: ArrayList<DietPlanDetailModel>? = null

现在我尝试按位置

访问元素
    val dietPlan= day1[position]

但是我的编译时间错误 -

  

在可空的上只允许安全或非空的断言   接收器类型的arraylist

为什么我会收到此错误,我该如何解决?

3 个答案:

答案 0 :(得分:7)

问题是,您将ArrayList定义为nullable。你有两个选择:

1)不要定义变量nullable(这取决于你的代码): var day1: ArrayList<DietPlanDetailModel> = ArrayList()

2)使用空检查访问您的数据结构: val dietPlan= day1?.get(position)

答案 1 :(得分:4)

根据定义,day1可以是null,但您通过执行[]来调用函数,这与调用day1.get(index)基本相同。

这可以抛出一个NullpointerException,Kotlin编译器试图预先推出。因此,只允许这样的安全通话:day1?.get()

答案 2 :(得分:1)

您告诉编译器您的变量可以为null(并为其指定null)。

day1[position]基本上是day1.get(position),如果day1null - &gt;,则会因NPE而崩溃null.get(position)

如果您可以保证day1将被初始化,则推荐lateinit或直接指定新的Arraylist并声明。当然,简单的day1?.get(position)可以正常工作。