简体   繁体   中英

How can I create an array of objects in Kotlin without initialization and a specific number of elements?

I want to create an Array of objects with a specific number of elements in Kotlin, the problem is I don't now the current values for initialization of every object in the declaration, I tried:

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

in Java, I have this and is exactly what I want, but i need it in Kotlin. :

Medico[] medicos = new Medico[20];

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

}

What would be the Kotlink equivalent of the above Java code?

Also, I tried with:

var misDoctores = arrayOfNulls<medic>(20)

for(i in misDoctores ){
    i = medic()
}

But I Android Studio show me the message: "Val cannot be reassigned"

The Kotlin equivalent of that could would be this:

val miArreglo = Array(20) { Medico() }

But I would strongly advice you to using Lists in Kotlin because they are way more flexible. In your case the List would not need to be mutable and thus I would advice something like this:

val miArreglo = List(20) { Medico() }

The two snippets above can be easily explained. The first parameter is obviously the Array or List size as in Java and the second is a lambda function, which is the init { ... } function. The init { ... } function can consist of some kind of operation and the last value will always be the return type and the returned value, ie in this case a Medico object.

I also chose to use a val instead of a var because List 's and Array 's should not be reassigned. If you want to edit your List , please use a MutableList instead.

val miArreglo = MutableList(20) { Medico() }

You can edit this list then, eg:

miArreglo.add(Medico())

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

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


The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM