我看到 Kotlin 有一个 List<out E>
集合,我想知道初始化它的不同方式。在 Java 中,我可以写:
List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");
我该如何在Kotlin中实现相同的效果?
我看到 Kotlin 有一个 List<out E>
集合,我想知道初始化它的不同方式。在 Java 中,我可以写:
List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");
我该如何在Kotlin中实现相同的效果?
listOf
这个顶层函数来帮助解决问题:
val geeks = listOf("Fowler", "Beck", "Evans")
List<T>
,因此不应该假设它是可变的。 - IlyaIlya 和 gmariotti 的答案都很好且正确。然而,一些替代方案分散在评论中,有些则未被提及。
本答案包括已经给出的总结,并加以澄清和其他几种替代方案。
List
)不可变或只读列表是无法添加或删除元素的列表。
listOf()
通常能够达到您的预期。这将创建一个类似于Java中的Arrays.asList
的不可变列表。emptyList()
也是相同的,但自然地返回一个空列表。listOfNotNull()
返回一个不包含所有null
元素的不可变列表。MutableList
)可变列表可以添加或删除元素。
mutableListOf()
,通常在需要添加或删除列表元素时使用此方法。arrayListOf()
。这将创建一个可变的ArrayList
。如果您确实需要一个ArrayList
实现,请使用它而不是mutableListOf()
。List
实现,可以像val list = LinkedList<String>()
那样初始化。这只是通过调用其构造函数来创建对象。仅在真正需要时使用,例如LinkedList
实现。<String>
或另一个类作为类型参数,例如val mutableList = mutableListOf<T>()
。 - Hermann Schwarz为了补充更多信息,Kotlin提供了不可变的List
和可变的MutableList
,可用listOf
和mutableListOf
初始化。如果您对Kotlin在集合方面提供的内容更感兴趣,可以前往官方参考文档Collections。
让我解释一些用例: 让我们创建一个不可变(非可变)列表并初始化项目:
val myList = listOf("one" , "two" , "three")
让我们创建一个包含初始化字段的可变列表:
val myList = mutableListOf("one" , "two" , "three")
让我们声明一个不可变的对象(无法更改),然后实例化它:
lateinit var myList : List<String>
// and then in the code :
myList = listOf("one" , "two" , "three")
最后,为每个项目添加一些额外的内容:
val myList = listOf("one" , "two" , "three")
myList.add() //Unresolved reference : add, no add method here as it is non mutable
val myMutableList = mutableListOf("one" , "two" , "three")
myMutableList.add("four") // it's ok
val alphabates : List<String> = listOf("a", "b", "c")
在Kotlin中,还有一种构建列表的方法,截至目前为止仍处于实验状态,但希望很快会改变。
inline fun <E> buildList(builderAction: MutableList<E>.() -> Unit): List<E>
val list = buildList {
testDataGenerator.fromJson("/src/test/resources/data.json").forEach {
add(dao.insert(it))
}
}
如需进一步阅读,请查看官方文档。
var temp: ArrayList<String> = ArrayList()
listOf
吗? - Michael