2017-10-30 6 views
-3

のNULL可能受信機のタイプで許可されているasssertedだけアンドロイドdevelopment.MyのArrayListのためkotlin使用し始めた今、私はで要素にアクセスしようとしていますthis-だけ安全か非nullでは通話がArrayListの

var day1: ArrayList<DietPlanDetailModel>? = null 

のように宣言されていますその位置は

val dietPlan= day1[position] 

しかし、私は、コンパイル時下記取得していますエラー -

だけ安全か非ヌルassserted呼び出し可能ですnull許容 受信者タイプのarraylist

なぜこのエラーが発生し、どのように解決できますか?

答えて

1

問題は、ArrayListnullableと定義したことです。あなたはここに2つのオプションがあります。

1)(これはあなたのコードに依存します)変数nullableを定義しない: var day1: ArrayList<DietPlanDetailModel> = ArrayList()

2)nullをチェックして、あなたのデータ構造にアクセス: val dietPlan= day1?.get(position)

+0

'day1?.get(position)'は、day1がnullの場合はnullを返します.nullのdietPlanのフィールドにアクセスしようとするとどうなりますか?nullpointer例外がスローされますか? –

+0

'nullable'型で作業するときは、常に' null'ケースも考慮する必要があります。これは、 'dietPlan'が' null'のときに、あなたのコードに何をするかによって決まります。だから、何が起こるべきか、ダイエット計画が返ってこないときを考える。 – guenhter

1

あなたは、変数がnullである可能性があり(nullに割り当てられる)ことをコンパイラに伝えました。あなたはday1は、idが宣言して新しいのArrayListを割り当てるlateinitまたはちょうどまっすぐお勧めします初期化されることを保証することができる場合>null.get(position)

-

day1[position]は、基本的にday1nullある場合NPEでクラッシュしますday1.get(position)です。もちろん、簡単なday1?.get(position)はうまく動作します。

1

定義されているように、day1nullことができますが、基本的にday1.get(index)を呼び出すのと同じである、[]を実行して機能を呼び出すしています。

これはNullpointerExceptionをスローする可能性があります。これはKotlinコンパイラが先行しようとします。したがって、このような安全な呼び出しだけが許可されます:day1?.get()

関連する問題