Android development.My arraylistはこのように宣言されています-
var day1: ArrayList<DietPlanDetailModel>? = null
今、私はその位置によって要素にアクセスしようとしています
val dietPlan= day1[position]
しかし、コンパイル時エラーを下回っています-
安全またはnull以外のアサートされた呼び出しのみが、null許容のレシーバータイプのarraylistで許可されます
このエラーが発生するのはなぜですか?どうすれば解決できますか?
問題は、ArrayList
をnullable
として定義したことです。ここには2つのオプションがあります。
1)変数nullable
を定義しないでください(これはコードによって異なります):var day1: ArrayList<DietPlanDetailModel> = ArrayList()
2)nullチェックを使用してデータ構造にアクセスします:val dietPlan= day1?.get(position)
定義されているように、_day1
_はnull
にすることができますが、_[]
_を実行して関数を呼び出しています。これは、基本的にday1.get(index)
を呼び出すのと同じです。
これはNullpointerException
をスローする可能性があり、Kotlinコンパイラはこれを回避しようとします。したがって、次のような安全な呼び出しのみが許可されます:day1?.get()
。
変数をnullにすることができる(そしてそれにnullを割り当てる)ことをコンパイラに伝えました。
_day1[position]
_は基本的にday1.get(position)
であり、_day1
_がnull
-> null.get(position)
の場合、NPEでクラッシュします
_day1
_が初期化されることを保証できる場合は、lateinit
をお勧めするか、そのまま、新しいArraylistに宣言を割り当てます。もちろん、単純なday1?.get(position)
は問題なく動作します。