如何在没有初始化和特定数量元素的情况下在 Kotlin 中创建对象数组?

Posted

技术标签:

【中文标题】如何在没有初始化和特定数量元素的情况下在 Kotlin 中创建对象数组?【英文标题】:How can I create an array of objects in Kotlin without initialization and a specific number of elements? 【发布时间】:2018-09-10 14:11:02 【问题描述】:

我想在 Kotlin 中创建一个具有特定数量元素的对象数组,问题是我现在没有在声明中初始化每个对象的当前值,我试过了:

var miArreglo = Array<Medico>(20, null)

在 Java 中,我有这个,这正是我想要的,但我在 Kotlin 中需要它。 :

Medico[] medicos = new Medico[20];

for(int i = 0 ; i < medicos.length; i++)
    medicos[i] = new Medico();


上述 Java 代码的 Kotlink 等效项是什么?

另外,我尝试过:

var misDoctores = arrayOfNulls<medic>(20)

for(i in misDoctores )
    i = medic()

但我的 android Studio 向我显示消息:“Val 无法重新分配”

【问题讨论】:

如果您不知道当前值,最好使用 List 代替,然后您可以在进行时添加值。此外,您还可以了解列表的大小。在您的情况下,问题是 i 被声明为 val,因此您无法重新分配。 【参考方案1】:

相当于 Kotlin 的可能是这样的:

val miArreglo = Array(20)  Medico() 

但我强烈建议您在 Kotlin 中使用 Lists,因为它们更加灵活。在您的情况下,List 不需要是可变的,因此我会建议这样的事情:

val miArreglo = List(20)  Medico() 

上面的两个sn-ps很容易解释。第一个参数显然ArrayList 的大小,如Java 中一样,第二个参数是一个lambda 函数,即init ... 函数。 init ... 函数可以包含某种操作,最后一个值将始终是返回类型和返回值,即在本例中为 Medico 对象。

我还选择使用val 而不是var,因为不应重新分配ListArray。如果您想编辑您的List,请改用MutableList

val miArreglo = MutableList(20)  Medico() 

然后您可以编辑此列表,例如:

miArreglo.add(Medico())

【讨论】:

也可以传id参数:List(20) id -> Medico() 如何在没有给定大小的情况下在 kotlin 中使用列表?这里给出的是 20。【参考方案2】:

如果你想要可以为空的对象列表,我们可以这样做

val fragment : Array<Fragment?> = Array(4)  null 


【讨论】:

这相当于问题,因为在 Java 中,数组可以包含空值。

以上是关于如何在没有初始化和特定数量元素的情况下在 Kotlin 中创建对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有元素重叠的情况下在 java 中使用布局?

如何在没有扩展内联 asm 的情况下在 gcc 内联汇编中声明和初始化局部变量?

如何在没有跳过的情况下在特定锚点处旋转图层?

如何在没有安装 MQTT 应用程序的设备的情况下在 android 上使用 MQTT 将消息推送到特定 IP?

如何在没有文本框的情况下在 Selenium 中上传文件

C90:如何在没有 C99 扩展的情况下在 C 中全局初始化此结构