📜  启用空安全时,默认的“列表”构造函数不可用颤振-无论(1)

📅  最后修改于: 2023-12-03 15:37:11.758000             🧑  作者: Mango

启用空安全时,默认的“列表”构造函数不可用

在 Kotlin 中,启用空安全后,使用默认的“列表”构造函数会出现编译错误,无论是 List 还是 MutableList。这是因为默认的构造函数没有指定列表中元素的可空性,而在启用空安全后,所有的参数都必须声明其可空性。

为什么出现这个错误?

在 Kotlin 中,当您启用空安全时,所有变量必须声明其可空性。这意味着您不能将未经声明的非空变量设为 null 值。而默认的“列表”构造函数并没有指定每个元素的可空性,因此出现了编译错误。

例如,在下面的代码中,尝试创建一个可变列表,列表中包含两个元素,其中一个是字符串,另一个是 null。程序将无法编译。

val list = mutableListOf("hello", null)
如何解决这个问题?

解决这个问题的方法是,显式声明每个元素的可空性,如下所示:

val list = mutableListOf<String?>("hello", null)

在上面的示例中,我们显式声明了列表中的每个元素都可以为 null。这是因为 String? 表示一个可空的字符串。在这种情况下,我们使用了 mutableListOf<String?> 而不是 mutableListOf<String>

要创建一个只包含非 null 值的可变列表,请使用 mutableListOf

val list = mutableListOf<String>()
list.add("hello")
list.add("world")

对于不可变列表,我们需要使用 listOf

val list = listOf<String>("hello", "world")
总结

默认的“列表”构造函数在 Kotlin 的空安全特性中不可用,因为它没有指定每个元素的可空性。要解决这个问题,我们需要显式声明每个元素的可空性,或者使用 mutableListOflistOf 来创建可变或不可变的列表。