如何初始化Kotlin的MutableList以清空MutableList?

ssu*_*ukk 210 kotlin

看起来很简单,但是,如何将Kotlin初始化MutableList为空MutableList

我可以通过这种方式破解它,但我确信有更容易的东西:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()
Run Code Online (Sandbox Code Playgroud)

Kir*_*man 383

你可以简单地写:

val mutableList = mutableListOf<Kolory>()
Run Code Online (Sandbox Code Playgroud)

这是最惯用的方式.

替代方式是

val mutableList : MutableList<Kolory> = arrayListOf()
Run Code Online (Sandbox Code Playgroud)

要么

val mutableList : MutableList<Kolory> = ArrayList()
Run Code Online (Sandbox Code Playgroud)

这是利用java类型通过编译器技巧ArrayList隐式实现类型的事实MutableList.

  • @androiddeveloper 那是因为`kotlin.collections.List`不是*`java.utils.List`。Kotlin 有一种映射一些内置 java 类型的机制。请参阅 https://kotlinlang.org/docs/reference/java-interop.html#mapped-types 和类似的问题。评论区不适合详细讨论这个问题。 (2认同)
  • @Mohanakrrishna 是的,这些函数支持传递参数。 (2认同)

Jay*_*ard 14

对于数组列表,取决于List的类型的各种形式:

val myList = mutableListOf<Kolory>() 
// or more specifically use the helper for a specific list type
val myList = arrayListOf<Kolory>()
Run Code Online (Sandbox Code Playgroud)

对于LinkedList:

val myList = linkedListOf<Kolory>()
// same as
val myList: MutableList<Kolory> = linkedListOf()
Run Code Online (Sandbox Code Playgroud)

对于其他列表类型,如果直接构造它们,将被假定为Mutable:

val myList = ArrayList<Kolory>()
// or
val myList = LinkedList<Kolory>()
Run Code Online (Sandbox Code Playgroud)

这适用于任何实现List接口的东西(即其他集合库).

如果列表已经是Mutable,则无需在左侧重复该类型.或者仅当您想要将它们视为只读时,例如:

val myList: List<Kolory> = ArrayList()
Run Code Online (Sandbox Code Playgroud)


FEE*_*LIX 7

在 kotlin 中创建可为空字符串的可变列表

val systemUsers: MutableList<String?> = mutableListOf()
Run Code Online (Sandbox Code Playgroud)


Cha*_*ang 6

我喜欢以下内容:

var book: MutableList<Books> = mutableListOf()
Run Code Online (Sandbox Code Playgroud)

/**返回带有给定元素的新[MutableList].*/

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
Run Code Online (Sandbox Code Playgroud)