2017-09-15 2 views

Répondre

6

Si vous avez une collection mutables:

val list = mutableListOf(1, 2, 3) 
list += 4 

Si vous avez une collection IMMUTABLE:

var list = listOf(1, 2, 3) 
list += 4 

notez que j'utilise val pour la liste mutable pour souligner que l'objet est toujours le même, mais son conte nt changements.

Dans le cas de la liste immutable, vous devez le faire var. Un nouvel objet est créé par l'opérateur += avec la valeur supplémentaire.

+2

faire '+ =' dans une liste non modifiable, nécessite de copier tous les éléments de la liste dans une nouvelle liste mutable, puis de la réaffecter à votre liste actuelle. Je ne savais pas que c'était approprié de déclarer votre liste comme 'var'. de toute façon, déclarer une liste var n'est pas une bonne idée pour moi. – crgarridos

+1

Si une liste est immuable, vous n'avez pas d'autre option pour la déclarer comme 'var'. Si une liste immuable est déclarée comme 'val', la liste ne peut jamais changer. Juste le réaffecter à une autre variable serait possible. – guenhter

+0

Exactement, je ne veux pas permettre de changer la référence de mes variables. il peut avoir un effet secondaire dans les tâches externes/simultanées. mieux de créer une copie pour extraire la logique. Mais ceci est hors de la portée de la question. – crgarridos

3

Si vous voulez utiliser spécifiquement java ArrayList alors vous pouvez faire quelque chose comme ceci:

fun initList(){ 
    val list: ArrayList<String> = ArrayList() 
    list.add("text") 
    println(list) 
} 

Sinon @guenhter réponse est celle que vous recherchez.

0

Les collections de Kotlin sont en lecture seule par défaut, donc listOf, mapOf etc. retourner des collections, auxquelles vous ne pouvez pas ajouter d'éléments. Par exemple, List<out T> est une interface centrale dans laquelle le mot-clé out indique que les éléments T sont uniquement produits par la liste, mais pas consumed. Par conséquent, seuls size, get, etc. peuvent être invoqués. L'interface MutableList<T> d'autre part peut également consommerT, c'est-à-dire add est autorisée.

val numbers: MutableList<Int> = mutableListOf(1, 2, 3) 
val readOnlyView: List<Int> = numbers 
println(numbers)  // prints "[1, 2, 3]" 
numbers.add(4) 
println(readOnlyView) // prints "[1, 2, 3, 4]" 
readOnlyView.clear() // -> does not compile 

Comme vous pouvez le voir, le stdlib comprend des méthodes pour une telle mutable (inscriptible) collections ainsi: mutableListOf, mutableSetOf() etc.

Pour plus de détails s'il vous plaît jeter un oeil at the docs.