19

刚开始使用 kotlin 进行 android 开发。我的数组列表是这样声明的-

var day1: ArrayList<DietPlanDetailModel>? = null

现在我试图通过它的位置访问一个元素

    val dietPlan= day1[position]

但我得到低于编译时错误 -

在可空接收器类型的 arraylist 上只允许安全或非空断言调用

为什么我会收到此错误,我该如何解决?

4

3 回答 3

29

问题是,您将 as 定义ArrayListnullable. 您在这里有两个选择:

  1. 不要定义变量nullable(这取决于您的代码):
var day1: ArrayList<DietPlanDetailModel> = ArrayList()
  1. 使用空检查访问您的数据结构:
val dietPlan= day1?.get(position)
于 2017-10-30T11:51:24.337 回答
7

按照定义,day1可以是,null但你是通过做来调用一个函数[],这与调用基本相同day1.get(index)

这可能会抛出一个NullpointerException,Kotlin 编译器试图阻止它。因此,只允许这样的安全调用:day1?.get().

于 2017-10-30T11:50:29.723 回答
2

您告诉编译器您的变量可以为 null(并为其分配 null)。

day1[position]本质上,如果是-> day1.get(position),它将与 NPE 崩溃day1nullnull.get(position)

如果您可以保证day1将被初始化 id 推荐lateinit或直接分配带有声明的新 Arraylist。当然,简单的day1?.get(position)工作正常。

于 2017-10-30T11:49:09.940 回答