在Kotlin声明空集合

如何在Kotlin中listOflistOfsetOf声明一个空集合?

我已经在下面声明了变量:

 val occupations = mapOf(Pair("Malcolm", "Captain"), Pair("Kaylee", "Mechanic")) val shoppingList = listOf("catfish", "water", "tulips", "blue paint") val favoriteGenres = setOf("Rock", "Classical", "Hip hop") 

我想检查这些收集是否为空。

我想检查这些收藏是否为空。

为什么不能简单地使用isEmpty()方法?

 print(occupations.isEmpty()) // >>> false print(shoppingList.isEmpty()) // >>> false print(favoriteGenres.isEmpty()) // >>> false 

无论如何,如果你真的想要宣布一个空的集合,你可以这样做:

 val emptyList = listOf<String>() val emptySet = setOf<String>() val emptyMap = mapOf<String, String>() 

要么

 val emptyList = emptyList<String>() val emptySet = emptySet<String>() val emptyMap = emptyMap<String, String>() 

让我们来看看引擎盖下。 调用不带参数的方法listOf()具有以下实现:

 /** Returns an empty read-only list. The returned list is serializable (JVM). */ @kotlin.internal.InlineOnly public inline fun <T> listOf(): List<T> = emptyList() 

很容易看到它只是调用另一个方法 – emptyList()

 /** Returns an empty read-only list. The returned list is serializable (JVM). */ public fun <T> emptyList(): List<T> = EmptyList 

它返回一个名为EmptyList内部对象

 internal object EmptyList : List<Nothing>, Serializable, RandomAccess { // <...> } 

所以总结是(就像@ brescia123所说的),这些方法完全一样:它们都返回一个空的不可变List ,由您来决定使用哪一个。

你可以像这样创建空的集合:

 val occupations = mapOf<String, String>() val shoppingList = listOf<String>() val favoriteGenres = setOf<String>()