arraylist 的可为 null 的接收者类型只允许安全或非 null asserted 调用
Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist
刚开始使用 kotlin android development.My arraylist 是这样声明的-
var day1: ArrayList<DietPlanDetailModel>? = null
现在我尝试通过元素的位置访问元素
val dietPlan= day1[position]
但我遇到了以下编译时错误-
Only safe or non null assserted calls are allowed on a nullable
receiver type of arraylist
为什么会出现此错误,我该如何解决?
您告诉编译器您的变量可以为 null(并为其分配了 null)。
day1[position]
本质上是 day1.get(position)
如果 day1
是 null
-> null.get(position)
,它将与 NPE 一起崩溃
如果你能保证 day1
将被初始化,id 推荐 lateinit
或直接分配带有声明的新 Arraylist。当然,简单的 day1?.get(position)
就可以了。
根据定义,day1
可以是 null
,但您通过执行 []
来调用函数,这与调用 day1.get(index)
基本相同。
这可能会抛出 NullpointerException
,Kotlin 编译器试图阻止这种情况。因此,只允许这样的安全调用:day1?.get()
.
问题是,您将 ArrayList
定义为 nullable
。您在这里有两个选择:
- 不要定义变量
nullable
(这取决于你的代码):
var day1: ArrayList<DietPlanDetailModel> = ArrayList()
- 使用空检查访问您的数据结构:
val dietPlan= day1?.get(position)
刚开始使用 kotlin android development.My arraylist 是这样声明的-
var day1: ArrayList<DietPlanDetailModel>? = null
现在我尝试通过元素的位置访问元素
val dietPlan= day1[position]
但我遇到了以下编译时错误-
Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist
为什么会出现此错误,我该如何解决?
您告诉编译器您的变量可以为 null(并为其分配了 null)。
day1[position]
本质上是 day1.get(position)
如果 day1
是 null
-> null.get(position)
如果你能保证 day1
将被初始化,id 推荐 lateinit
或直接分配带有声明的新 Arraylist。当然,简单的 day1?.get(position)
就可以了。
根据定义,day1
可以是 null
,但您通过执行 []
来调用函数,这与调用 day1.get(index)
基本相同。
这可能会抛出 NullpointerException
,Kotlin 编译器试图阻止这种情况。因此,只允许这样的安全调用:day1?.get()
.
问题是,您将 ArrayList
定义为 nullable
。您在这里有两个选择:
- 不要定义变量
nullable
(这取决于你的代码):
var day1: ArrayList<DietPlanDetailModel> = ArrayList()
- 使用空检查访问您的数据结构:
val dietPlan= day1?.get(position)