在可能为空的接收器types的数组列表中,只允许安全或非空的确定的呼叫
刚开始使用kotlin进行android开发。我的arraylist被声明为这样 –
var day1: ArrayList? = null
现在我试图通过它的位置访问一个元素
val dietPlan= day1[position]
但我正在编译时间错误,
在可能为空的接收器types的数组列表中,只允许安全或非空的确定的呼叫
为什么我得到这个错误,我该如何解决?
问题是,您将ArrayList
定义为nullable
。 你有两个选择:
1)不要定义variablesnullable
(这取决于你的代码): var day1: ArrayList
2)访问你的数据结构与空检查: val dietPlan= day1?.get(position)
你告诉编译器你的variables可以是null(并且赋值为null)。
day1[position]
基本上是day1.get(position)
,如果day1
为null
,它会和NPE一起崩溃 – > null.get(position)
如果你能保证day1
将被初始化id建议lateinit
或者直接分配新的Arraylist声明。 当然,简单的day1?.get(position)
工作正常。
如定义的那样, day1
可以为null
但通过执行[]
来调用函数,这与调用day1.get(index)
基本相同。
这可以抛出一个NullpointerException
,Kotlin编译器试图预先处理。 因此,只允许这样的安全呼叫: day1?.get()
。