刚开始使用 kotlin 进行 android 开发。我的数组列表是这样声明的-
var day1: ArrayList<DietPlanDetailModel>? = null
现在我试图通过它的位置访问一个元素
val dietPlan= day1[position]
但我得到低于编译时错误 -
在可空接收器类型的 arraylist 上只允许安全或非空断言调用
为什么我会收到此错误,我该如何解决?
刚开始使用 kotlin 进行 android 开发。我的数组列表是这样声明的-
var day1: ArrayList<DietPlanDetailModel>? = null
现在我试图通过它的位置访问一个元素
val dietPlan= day1[position]
但我得到低于编译时错误 -
在可空接收器类型的 arraylist 上只允许安全或非空断言调用
为什么我会收到此错误,我该如何解决?
问题是,您将 as 定义ArrayList
为nullable
. 您在这里有两个选择:
nullable
(这取决于您的代码):var day1: ArrayList<DietPlanDetailModel> = ArrayList()
val dietPlan= day1?.get(position)
按照定义,day1
可以是,null
但你是通过做来调用一个函数[]
,这与调用基本相同day1.get(index)
。
这可能会抛出一个NullpointerException
,Kotlin 编译器试图阻止它。因此,只允许这样的安全调用:day1?.get()
.
您告诉编译器您的变量可以为 null(并为其分配 null)。
day1[position]
本质上,如果是-> day1.get(position)
,它将与 NPE 崩溃day1
null
null.get(position)
如果您可以保证day1
将被初始化 id 推荐lateinit
或直接分配带有声明的新 Arraylist。当然,简单的day1?.get(position)
工作正常。