arraylist 的可为 null 的接收者类型只允许安全或非 null asserted 调用

Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist

刚开始使用 kotlin android development.My arraylist 是这样声明的-

var day1: ArrayList<DietPlanDetailModel>? = null

现在我尝试通过元素的位置访问元素

    val dietPlan= day1[position]

但我遇到了以下编译时错误-

Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist

为什么会出现此错误,我该如何解决?

您告诉编译器您的变量可以为 null(并为其分配了 null)。

day1[position] 本质上是 day1.get(position) 如果 day1null -> null.get(position)

,它将与 NPE 一起崩溃

如果你能保证 day1 将被初始化,id 推荐 lateinit 或直接分配带有声明的新 Arraylist。当然,简单的 day1?.get(position) 就可以了。

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

这可能会抛出 NullpointerException,Kotlin 编译器试图阻止这种情况。因此,只允许这样的安全调用:day1?.get().

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

  1. 不要定义变量nullable(这取决于你的代码):
var day1: ArrayList<DietPlanDetailModel> = ArrayList()
  1. 使用空检查访问您的数据结构:
val dietPlan= day1?.get(position)