如何在Kotlin中创建列表?

时间:2018-05-13 17:46:43

标签: kotlin

我在Kotlin REPL中尝试了这些

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]
            ^

第一行按预期正常工作。在显示listA时,我得到:

var listC = [1,2]

第二行引发以下错误:

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

当我尝试使用非null类型时, 即。

.hide {
  display:none;
}

我收到此错误:

<div class="row hide">...</div>

我是Kotlin的新手。有人可以解释一下这里发生了什么吗?

4 个答案:

答案 0 :(得分:8)

来自Kotlin documentation on Collections

  

Kotlin没有专门的语法结构来创建列表或集合。使用标准库中的方法,例如listOf(),mutableListOf(),setOf(),mutableSetOf()。

注释之外的代码没有列表文字currently

答案 1 :(得分:8)

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

解释

  • listOf()

      

    创建一个新的只读列表。

  • listOfNotNull()

      

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

  • arrayListOf()

      

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

  • mutableListOf()

      

    表现得像ar​​rayListOf()。实际上,mutableListOf()在内部使用ArrayLists。 Read more

阵列

  • arrayOf()
      

    这会创建一个数组,这与您所知道的大多数语言非常不同。   而不是像{1,2,3}或[1,2,3]这样的语法结构,你有功能   在Kotlin。您还可以获得类型化数组的函数:

         
        
    • booleanArrayOf()
    •   
    • doubleArrayOf()
    •   
    • charArrayOf()
    •   
    • ...
    •   

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

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

然而,正如所讨论的here,这可能会在未来发生变化。

<小时/> 在使用数组时,了解这些函数正在创建的返回类型非常重要。 举个例子: Array<Int>是一个Integer[],而IntArray在定位JVM时是一个原始int[]

答案 2 :(得分:2)

您得到[null, null],因为that's how toString() happens to be defined in java.util.AbstractCollectionlistOf创建了一个继承此实现的java.util.ArrayList

你得到的错误是因为 在Kotlin中的一个地方,这个语法恰好起作用:annotation parameters。所以解析器理解它。但它创建了数组,而不是列表,因此即使语法不限于注释,您的代码也无法编译。

答案 3 :(得分:0)

因此对于可变列表,您可以使用String声明一个空的val list: MutableList<String> = mutableListOf()。请注意,将val声明用作var与Java中的final相似。如果您想要一个不可变的列表,则可以像这样使用valval list: List<String> = listOf("x", "y", "z")

为清楚起见,例如,可变列表可以在元素初始化后添加删除的元素,而不可变元素则不能。

Immutable Lists Docs

Mutable List Docs