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

And*_*per 4 android kotlin kotlin-null-safety

刚刚开始使用kotlin进行android开发.我的arraylist被宣布为这样 -

var day1: ArrayList<DietPlanDetailModel>? = null
Run Code Online (Sandbox Code Playgroud)

现在我试图通过它的位置访问一个元素

    val dietPlan= day1[position]
Run Code Online (Sandbox Code Playgroud)

但我在编译时错误 -

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

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

gue*_*ter 16

问题是,你定义了ArrayListas nullable.你有两个选择:

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

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

  • 当使用`nullable`类型时,总是必须考虑`null`-case。当dietPlan`为null时,这取决于您的代码该做什么。因此,当没有饮食计划返回时,考虑应该怎么做。 (2认同)

s1m*_*nw1 5

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

这会抛出NullpointerExceptionKotlin编译器试图阻止的。因此,仅允许这样的安全调用:day1?.get()