如何在Kotlin中创建空数组?

121
我目前正在使用Array(0, {i -> ""}),我想知道是否有更好的实现方法,例如Array()
此外,如果我使用arrayOfNulls<String>(0) as Array<String>,编译器会警告我此转换永远不会成功。但这是在Array(0, {i -> ""})中的默认实现。我错过了什么吗?

https://dev59.com/AJDea4cB1Zd3GeqPhd3J - 其中一条评论表明该警告是一个 bug。 - Duncan McGregor
8个回答

154

截至2015年6月,有Kotlin标准库函数

public fun <T> arrayOf(vararg t: T): Array<T>

要创建一个空的字符串数组,你可以这样写:

val emptyStringArray = arrayOf<String>()

2
IntArray 这样的类型化数组怎么办?现在我正在使用 arrayOf<Int>().toIntArray(),有更好的方法吗? - csharpfolk
6
这些方法的目的是什么?由于我们无法分配大小,因此无法分配值或获取值。数组[0]会抛出java.lang.ArrayIndexOutOfBoundsException:异常。 - Asif Mushtaq
2
@csharpfolk,您可以使用intArrayOf()来初始化一个空的IntArray。 - Cremons
1
这个长度是不可变的,为0!因此它只适用于您不想存储任何数据(只想要类型)的非常特殊的目的。使用Array(length){""}来包含所需的长度。有关详细信息,请参见下面的我的答案 - Mir-Ismaili
1
@csharpfolk IntArray(size = 2) @csharpfolk 整数数组(大小=2) - Paul
显示剩余2条评论

50

仅供参考,还有emptyArray。例如:

var arr = emptyArray<String>()

See


1
arr[0] 抛出 java.lang.ArrayIndexOutOfBoundsException:,我们该如何使用它? - Asif Mushtaq
13
这是一个空数组,您不能向其添加/读取任何内容。它可能看起来毫无用处,但有时你需要将一个数组传递到某个地方,这让你可以轻松构建一个空数组。 - Kuba Beránek
2
这比Martian Odyssey的答案更好,因为在数据类中用于初始化数组时,arrayOf会导致java.util.concurrent.ExecutionException而emptyArray()不会。 - iSWORD
1
这个长度是不可变的,为0!因此它只适用于您不想存储任何数据(只想要类型)的非常特殊的目的。使用Array(length){""}来包含所需的长度。有关详细信息,请参见下面的我的答案 - Mir-Ismaili

22

是空还是null?这是个问题!

要创建一个由null组成的数组,只需使用arrayOfNulls<Type>(length)即可。


但是如果要生成一个长度为length数组,请使用:

val arr = Array(length) { emptyObject }

请注意,必须根据每种数据类型正确定义一个emptyObject(因为您不希望出现null)。例如,对于StringemptyObject可以是""。因此:

val arr = Array(3) { "" }  // is equivalent for: arrayOf("","","")

这里有一个实时例子。请注意,默认情况下该程序使用两个示例参数运行。


arr.isEmpty() 返回 false。我猜是因为我们让 Kotlin 把 "" 当作空值来处理了? - user1906450

11

空数组

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)

1
这是一个空值数组,不是问题中的空字符串。 - polkovnikov.ph

4

如上所述,您可以使用 IntArray(size)FloatArray(size)


3

我找到了两种创建空数组的方法,第二种方法不需要使用lambda:

var arr = Array (0, { i -> "" })
var arr2 = array<String>()

关于Kotlin的空字符串,是不允许的。您必须使用String?类型来允许字符串为空。


2

用途:

@JvmField val EMPTY_STRING_ARRAY = arrayOfNulls<String>(0)

它返回一个大小为0的字符串数组,并用空值初始化。 2. 错误:
@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

It returns arrayOfNulls<String>(0)

2. Wrong:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

它返回一个包含字符串的数组。

1

初始化数组并赋值的最简单方法:

val myArray: Array<String> = Array(2) { "" }
    myArray[0] = "Java"
    myArray[1] = "Kotlin"

myArray.isEmpty() 返回 false。我猜测这是因为我们让 Kotlin 把 "" 当作空值来处理了? - user1906450

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接