在可能为空的接收器types的数组列表中,只允许安全或非空的确定的呼叫

刚开始使用kotlin进行android开发。我的arraylist被声明为这样 –

var day1: ArrayList? = null 

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

  val dietPlan= day1[position] 

但我正在编译时间错误,

在可能为空的接收器types的数组列表中,只允许安全或非空的确定的呼叫

为什么我得到这个错误,我该如何解决?

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

1)不要定义variablesnullable (这取决于你的代码): var day1: ArrayList = ArrayList()

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

你告诉编译器你的variables可以是null(并且赋值为null)。

day1[position]基本上是day1.get(position) ,如果day1null ,它会和NPE一起崩溃 – > null.get(position)

如果你能保证day1将被初始化id建议lateinit或者直接分配新的Arraylist声明。 当然,简单的day1?.get(position)工作正常。

如定义的那样, day1可以为null但通过执行[]来调用函数,这与调用day1.get(index)基本相同。

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