Kotlin:null 不能是非 null 类型的值

Posted

技术标签:

【中文标题】Kotlin:null 不能是非 null 类型的值【英文标题】:Kotlin : null cannot be value of non null type kotlin 【发布时间】:2018-07-06 11:27:33 【问题描述】:

如何在 Kotlin 中为 ArrayList 分配空值?

我正在尝试将 null 值添加到我的自定义 ArrayList 像这样

var mList = ArrayList<CustomClass>()
mList.add(null)

在 java 中是可能的,但我如何在 Kotlin 中实现这一点? 我得到了

null 不能是非 null 类型 kotlin 的值

我需要插入 null 值以便在 RecyclerView 中加载更多功能

【问题讨论】:

Kotlin 的 null docs 是一个很好的起点。 【参考方案1】:

那你得这样写。

var mList = ArrayList<CustomClass?>()
mList.add(null)

您必须在 ArrayList 中的类型之后添加一个?,因为? 允许我们放置一个空值。

【讨论】:

【参考方案2】:

Kotlin 的类型系统区分可空类型和非空类型。例如,如果你声明一个简单的String 变量并让编译器推断它的类型,它就不能保存null

var a = "text" //inferred type is `String`
a = null //doesn’t compile!

另一方面,如果您希望变量也能够指向null,则类型显式地用问号注释:

var a: String? = "text"
a = null //Ok!

在您的示例中,ArrayList 使用泛型类型 CustomClass 声明,该类型不可为空。您需要改用可空类型CustomClass?。此外,您可以使用Kotlin’s standard library functions for creating instances of lists,最好是只读

var mList = listOf<CustomClass?>(null)

否则mutableListOf()arrayListOf() 会帮助你。

【讨论】:

以上是关于Kotlin:null 不能是非 null 类型的值的主要内容,如果未能解决你的问题,请参考以下文章

null 不能强制转换为非 null 类型 kotlin.String NullPointer 异常

kotlin.TypeCastException: null 不能转换为非 null 类型 com.midsizemango.databasekotlin.Note

null 不能转换为非 null 类型 android.support.v4.view.ViewPager - KOTLIN

致命异常 java.lang.NullPointerException: null 不能转换为非 null 类型 kotlin.String

Android Kotlin:null 不能转换为非 null 类型 com.android.app.ui.category.CategoryAdapter.ViewHolder 想要在 recycl

Kotlin---------------可空类型与? ?: ?. !!