问题
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