如何在Kotlin中创建一个空数组?


93

Array(0, {i -> ""})目前正在使用,我想知道是否有更好的实现,例如Array()

另外,如果使用arrayOfNulls<String>(0) as Array<String>,编译器将警告我该强制转换永远不会成功。但这是内部的默认实现Array(0, {i -> ""})。我想念什么吗?


Answers:


128

截止到2015年6月,有Kotlin标准库功能

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

因此,要创建一个空字符串数组,您可以编写

val emptyStringArray = arrayOf<String>()

2
那么像类型数组IntArray呢?现在我正在使用arrayOf<Int>().toIntArray(),还有什么更好的方法吗?
csharpfolk '17

5
这些方法的目的是什么?因为我们无法分配大小,所以我们无法分配值或获取。array [0]引发java.lang.ArrayIndexOutOfBoundsException:异常。
阿西夫·穆斯塔克

如果类型T不是String怎么办?
阿里

1
@csharpfolk,您可以使用intArrayOf()初始化一个空的IntArray
Cremons

如何在kotlin中的字符串数组中添加项目?
Syed Hamza Hassan,

42

仅供参考,也有emptyArray。例如,

var arr = emptyArray<String>()

看到


1
arr [0]抛出java.lang.ArrayIndexOutOfBoundsException:如何使用?
阿西夫·穆斯塔克

8
这是一个空数组,您无法向其添加/读取任何内容。似乎没有用,但是有时您必须在某个地方传递一个数组,这使您可以轻松构造一个空数组。
库巴·贝拉内克

1
这比Martian Odyssey的答案要好,因为在数据类中使用arrayOf初始化数组时,arrayOf会导致java.util.concurrent.ExecutionException,而emptyArray()不会。
iSWORD

1
的长度是不变的0!因此,仅出于非常特殊的目的,即您不想存储任何数据(只需要type),它很有用。使用Array(length){""}包括所需length。请参阅我的回答下面的详细资料。
Mir-Ismaili

14

空还是null?这就是问题所在!

要创建的数组null,只需使用arrayOfNulls<Type>(length)


但是要生成一个的size数组length,请使用:

val arr = Array(length) { emptyObject }

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

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

是一个生动的例子。请注意,默认情况下,该程序使用两个示例参数运行。


9

空数组

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

1
这是一个null数组,而不是所讨论的空字符串。
polkovnikov.ph

2

使用:

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

它返回一个0大小的字符串数组,并使用空值初始化。

1.错误:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

它返回 arrayOfNulls<String>(0)

2.错误:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

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


2

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


1

我发现了两种创建空数组的方法,第二种没有lambda的方法:

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

关于Kotlin的空字符串,这是不允许的。您必须使用String吗?键入以允许字符串为空。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.