Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist

☆樱花仙子☆ 提交于 2019-12-10 09:44:57

问题


Just started using kotlin for android development.My arraylist is declared like this-

var day1: ArrayList<DietPlanDetailModel>? = null

Now I am trying to access an element by its position

    val dietPlan= day1[position]

but i am getting below compile time error-

Only safe or non null assserted calls are allowed on a nullable receiver type of arraylist

Why am i getting this error and how can i resolve it?


回答1:


The problem is, that you defined the ArrayList as nullable. You have two options here:

1) don't define the variable nullable (this depends on your code): var day1: ArrayList<DietPlanDetailModel> = ArrayList()

2) access your data-structure with a null check: val dietPlan= day1?.get(position)




回答2:


As defined, day1 can be null but you're invoking a function by doing [], which is basically the same as calling day1.get(index).

This can throw a NullpointerException, which the Kotlin compiler tries to prevend. Thus, only safe calls like this are allowed: day1?.get().




回答3:


You told compiler that your variable can be null (and assigned null to it).

day1[position] is essentially day1.get(position) which will crash with NPE if day1 is null -> null.get(position)

If you can guarantee that day1 will be initialized id recommend lateinit or just straight up assigning new Arraylist with declaration. Of course, simple day1?.get(position) works fine.



来源:https://stackoverflow.com/questions/47014469/only-safe-or-non-null-assserted-calls-are-allowed-on-a-nullable-receiver-type-of

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!