刚开始使用kotlin进行android开发。我的arraylist就是这样声明的 -
var day1: ArrayList<DietPlanDetailModel>? = null
现在我尝试按位置
访问元素 val dietPlan= day1[position]
但是我的编译时间错误 -
在可空的上只允许安全或非空的断言 接收器类型的arraylist
为什么我会收到此错误,我该如何解决?
答案 0 :(得分:7)
问题是,您将ArrayList
定义为nullable
。你有两个选择:
1)不要定义变量nullable
(这取决于你的代码):
var day1: ArrayList<DietPlanDetailModel> = ArrayList()
2)使用空检查访问您的数据结构:
val dietPlan= day1?.get(position)
答案 1 :(得分:4)
根据定义,day1
可以是null
,但您通过执行[]
来调用函数,这与调用day1.get(index)
基本相同。
这可以抛出一个NullpointerException
,Kotlin编译器试图预先推出。因此,只允许这样的安全通话:day1?.get()
。
答案 2 :(得分:1)
您告诉编译器您的变量可以为null(并为其指定null)。
day1[position]
基本上是day1.get(position)
,如果day1
为null
- &gt;,则会因NPE而崩溃null.get(position)
如果您可以保证day1
将被初始化,则推荐lateinit
或直接指定新的Arraylist并声明。当然,简单的day1?.get(position)
可以正常工作。