在可能为空的接收器类型的数组列表中,只允许安全或非空的确定的呼叫
刚开始使用kotlin进行android开发。我的arraylist被声明为这样 –
var day1: ArrayList<DietPlanDetailModel>? = null
现在我试图通过它的位置访问一个元素
val dietPlan= day1[position]
但我正在编译时间错误,
在可能为空的接收器类型的数组列表中,只允许安全或非空的确定的呼叫
为什么我得到这个错误,我该如何解决?
问题是,你定义的ArrayList
为nullable
。 你有两个选择:
1)不要定义变量nullable
(这取决于你的代码): var day1: ArrayList<DietPlanDetailModel> = ArrayList()
2)访问你的数据结构与空检查: val dietPlan= day1?.get(position)
你告诉编译器你的变量可以是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()
。
- 如何保存从RadioButton中选择的颜色,并使用android应用于ListView
- Kotlin转换不再适用于Android Studio 3.0
- 为什么Kotlin允许在不同的文件夹(例如main和androidTest)中有两个具有相同名称和包的类?
- 用Kotlin 1.1.2-4编译时的循环依赖关系,而不是1.1.2-3
- 更改导航抽屉项目颜色过滤器也改变了使用相同的图像ID的imageView
- 如何在Kotlin中延迟调用函数?
- Android Studio在Kotlin第二次编译之前不会编译更改
- 在Kotlin Android中使用Parceler时没有虚方法错误
- 使用RxJava的Android室处理空的查询结果