如何在Kotlin中创建列表?

55ooxyrt  于 2022-11-16  发布在  Kotlin
关注(0)|答案(5)|浏览(191)

我在KotlinREPL试过这些

var listA = listOf(null ,null)
var listB = [null, null]

第一行按预期运行良好。在显示listA时,我得到:

[null, null]

第二行抛出以下错误:

error: cannot use 'Nothing?' as reified type parameter
var listB = [null,null]
            ^
error: unsupported [Collection literals outside of annotations]
var listB = [null,null]
            ^
error: unsupported [Array<Nothing> in return type is illegal]
var listB = [null,null]
            ^

当我用非空类型尝试同样的方法时,即

var listC = [1,2]

我得到这个错误:

error: unsupported [Collection literals outside of annotations]
var listC = [1,2]
            ^

我是新来的,谁能解释一下这是怎么回事?

myss37ts

myss37ts1#

来自Kotlindocumentation on Collections
Kotlin没有专门的语法结构来创建列表或集合。请使用标准库中的方法,如listOf()、mutableListOf()、setOf()、mutableSetOf()。
注解之外的代码没有列表文字currently

dauxcl2d

dauxcl2d2#

正如@Carcigenicate所指出的,[null, null]没有语法。
但是,Kotlin确实有一些处理列表和数组的方便方法。

列表

  • 列表()

创建新的只读列表。

  • 非空列表()

基本上与listOf()相同,但没有空值。即使是空字符串也会被跳过。

  • 数组列表

创建一个ArrayList。这次您可以修改(添加/删除)元素。

  • 可变列表

行为类似于arrayListOf()。实际上,mutableListOf()在内部使用ArrayLists.Read more
数组

  • 数组

这就创建了一个数组,这与你所知道的大多数语言都有很大的不同。Kotlin中有函数,而不是像{1,2,3}或[1,2,3]这样的语法结构。你还可以得到类型数组的函数:

  • 布尔数组
  • 双数组()
  • 字符数组()
  • ...

注解是一个例外,它解释了编译器错误[Collection literals outside of annotations]

@MyAnnotation(arguments = [1, 2, 3])

但是,如here所述,将来可能会发生变化。
在使用数组时,了解这些函数创建的返回类型是很重要的。例如:Array<Int>是一个Integer[],而IntArray在面向JVM时是一个基本的int[]

7xllpg7q

7xllpg7q3#

所以对于可变列表的情况,你可以声明一个空的String列表:val list: MutableList<String> = mutableListOf()。如果你想要一个不可变的列表,那么你可以这样使用valval list: List<String> = listOf("x", "y", "z") .
另请注意,您应该考虑使用valvar的用例。列表的可变性与列表本身的值有关,其中valvar是变量。如果您使用var而不是val,则可以重新分配列表(类似于Java的final)
为了清楚起见,作为一个例子,可变列表可以在初始化后添加和删除元素,而不可变列表不能。
Immutable Lists Docs
Mutable List Docs

3htmauhk

3htmauhk4#

你会得到[null, null],因为toString()恰好是这样定义在java.util.AbstractCollection中的,listOf创建了一个继承了这个实现的java.util.ArrayList
您得到的错误是因为在Kotlin中有 is 一个地方恰好可以使用此语法:注解参数,所以解析器理解它,但是它创建数组,而不是列表,所以即使语法不限于注解,代码也不会编译。

nkoocmlb

nkoocmlb5#

是的,这不是用Kotlin创建List的正确语法。下面是ListMutableList的一个例子(带有写操作),以及你可以对它们进行的一些操作:
列表

val numbers = listOf("one", "two", "three", "four")
println("Number of elements: ${numbers.size}")
println("Third element: ${numbers.get(2)}")
println("Fourth element: ${numbers[3]}")
println("Index of element \"two\" ${numbers.indexOf("two")}")

可变列表

val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
numbers.removeAt(1)
numbers[0] = 0
numbers.shuffle()
println(numbers)

相关问题